#include<iostream.h>
#include<conio.h>
struct elem
{
int Data;
elem *Next;
};
elem *Create()
{
elem *pl = new elem;
cout << "vvedite element: " << endl;
cin >> pl -> Data;
pl -> Next = 0;
return pl;
}
elem *insFirst(int n)
{
elem *q = Create();
elem *p;
for (int i=0;i<n-1;i++)
{
p = Create();
p->Next = q;
q = p;
}
return q;
}
elem *showpis(elem *pl)
{
while(pl)
{
cout << " " << pl -> Data;
pl = pl -> Next;
}
cout << "\n";
return pl;
}
void main(void)
{
int n;
cout << "vvedite kol-vo elementov spiska: ";
cin >> n;
elem *k = insFirst(n);
cout << "spisok: ";
showpis(k);
getch();
}
Динамический структуры данных (списки)
Код:
собственно в программе я интерактивно ввожу количество элементов списка, затем заполняю его, и вывожу на экран для проверки.
что мне нужно сделать далее:
1)перевернуть список.
2)удалить первый элемент .
3)перевернуть список.
всю сложность для мне представляет перевернуть список, а перевернуть его надо так:
при обхождении списка мне нужно записывать его элементы в начало нового списка тем самым перевернув его, помогите плз напишите функцию переворота списка, заранее благодарен...
я вообще правильно написал функции ?
Код:
struct Elem {
int data;
elem *next;
};
void removeLast( Elem *list )
{
if( !list )
return;
for( Elem *item = list; item->next; item = item->next ) {
if( !item->next->next ) {
delete item->next->next;
item->next = 0;
break;
}
}
}
int data;
elem *next;
};
void removeLast( Elem *list )
{
if( !list )
return;
for( Elem *item = list; item->next; item = item->next ) {
if( !item->next->next ) {
delete item->next->next;
item->next = 0;
break;
}
}
}
P.S. Тут не предусмотрена ситуация, в которой список состоит из одного элемента, т.к. в этом случае требуется обнулить исходный указатель на первый эл. списка. Тут уж решение индивидуальное, зависит от контекста.
Код:
while ! a.empty
b.push( a.pop )
b.pop()
while ! b.empty
a.push( b.pop )
b.push( a.pop )
b.pop()
while ! b.empty
a.push( b.pop )