/* przyklad operacji na listach
- tu sie uzywa jezyka C++ (nie C)
- w przypadku j. C zamiast operatorow new/delete
nalezy uzywac funkcji malloc()/free()
*/
struct Elem {
int wartosc;
Elem *nast;
Elem *pop;
};
struct Lista {
Elem *glowa;
Elem *ogon;
};
void pokazListe(Lista *li) {
Elem *x;
if(li==0 || li->glowa==0) { printf("lista pusta\n"); return; }
x=li->glowa;
while(x) {
printf("%d ", x->wartosc); x=x->nast;
}
printf("\n");
}
int main() {
Lista *li1;
li1= new Lista(); // tworzymy zm. dynamiczna (obiekt)
li1->glowa=0; // wypelniamy pola
li1->ogon=0;
pokazListe(li1);
delete li1; // niszczymy zm. dyn.
// ---
Elem *e1, *e2, *e3;
e1= new Elem();
e2= new Elem();
e3= new Elem();
li1= new Lista();
li1->glowa=e1;
li1->ogon=e3;
e1->wartosc=111;
e1->pop=0;
e1->nast=e2;
e2->wartosc=222;
e2->pop=e1;
e2->nast=e3;
e3->wartosc=333;
e3->pop=e2;
e3->nast=0;
pokazListe(li1);
li1->ogon=e2; // odcinamy ostatni element z listy...
li1->ogon->nast=0;
// lub e2->nast=0;
pokazListe(li1);
delete li1;
delete e1;
delete e2;
delete e3;
return 0;
}