Documente Academic
Documente Profesional
Documente Cultură
.!e"initie Se numeste lista o structura de date ce reprezinta o succesiune de noduri astfel incat in fiecare nod se gaseste o legatura catre un alt nod (ex: urmatorul, precedentul etc.).
Acestea sunt folosite la implementarea mai multor structuri de date. Spre exemplu: - grafuri (liste de adiacenta) - cozi - stive
,.Liste sim%lu inlantuite -istele simplu inlantuite sunt structuri de date dinamice omogene. Spre deose ire de masive, listele nu sunt alocate ca locuri omogene de memorie, ci ca elemente separate de memorie. )iecare nod al listei contine, in afara ce informatia utila, adresa urmatorului element. Aceasta organizare permite numai acces secvential la elementele listei. 'entru accesarea listei tre uie cunoscuta adresa primului element (numita capul listei)+ elementele urmatoare sunt accesate parcurgand lista. .peratiile care se pot efectua asupra listelor simplu "nlantuite sunt: adaugarea unui element la lista, stergerea unui element din lista si cautarea dupa anumite criterii. 'entru toate aceste operatii se considera ca exista o varia ila, p, care memoreaza "nceputul listei (adresa primului element), iar elementele sunt definite prin urmatoarea structura: struct element /int data+ struct element 0next+ 1 0p, 0*, 0aux, el+ unde p va fi utilizata pentru memorarea primului element, q va fi utilizat pentru parcurgerea listei iar aux se va folosi la crearea unui nou element "n lista+ el este utilizat doar pentru a avea dimensiunea unui element, necesara pentru functia malloc.
'entru a insera un element la "nceputul listei tre uie alocat spatiu de memorie pentru un nou element si creata legatura "ntre noul element si primul element din lista. Apoi tre uie mutat "nceputul listei pentru a indica noul element. 2nstructiunile sunt: aux 3 (element 0) malloc (sizeof(el))+ cin 44 aux-5data+ aux-5next 3 p+ p3aux+ 2. Adaugarea unui element la sfrsitul listei 'entru aceasta operatie tre uie parcursa lista p%na la ultimul element care va fi legat de un element nou creat. 2nstructiunile sunt: * 3 p+ 6$ile (*-5next 73 8(--) * 3 *-5next+ aux 3 (element 0) malloc (sizeof(el))+ cin 44 aux-5data+ aux-5next 3 8(--+ *-5next 3 aux+ 3. Adaugarea unui element naintea unui element care ndeplineste o anumita conditie 'entru aceasta operatie tre uie parcursa lista p%na la gasirea elementui cautat, astfel "nc%t indicatorul sa se opreasca pe elementul anterior. Apoi tre uie creat un nou element si se vor crea legaturile (elementul indicat este legat de elementul nou si elementul nou este legat de urmatorul element din lista). Situatia tre uie tratata "n mod diferit pentru primul element fata de celelalte,
deoarece inserarea unui element "naintea primului element al listei presupune mutarea "nceputului listei. 2nstructiunile sunt: cout 44 92ntroduceti elementul din lista:+ cin 55 n+ if (p-5data 33 n) /aux 3 (element 0) malloc (sizeof(el))+ cin 44 aux-5data+ aux-5next 3 p+ p3aux+1 else /* 3 p+ 6$ile (*-5next-5data 73 n) ;;daca data din elementul urmator este egala cu n * 3 *-5next+ aux 3 (element 0) malloc (sizeof(el))+ cin 44 aux-5data+ aux-5next 3 *-5next+ *-5next 3 aux+ 1 4. Stergerea unui element din lista 'resupune crearea legaturii "ntre elementul anterior elementului sters si cel urmator. Se va face distictie "ntre primul element si celelalte elemente din lista. 2nstructiunile sunt: cout 44 92ntroduceti elementul pe care doriti sa il stergeti:+ cin 55 n+ if (p-5data 33 n)
/aux 3 p+ p 3 p-5next+ free(aux)+ 1 else /* 3 p+ 6$ile (*-5next-5data 73 n) ;;daca data din elementul urmator este egala cu n * 3 *-5next+ aux 3 *-5next+ *-5next 3 *-5next-5next+ free(aux)+ 1
<.-iste du lu inlantuite -istele du lu "nlantuite prezinta avanta=ul legarii fiecarui element at%t cu elementul urmator c%t si cu cel anterior, astfel "nc%t parcurgerea listei se poate face "n am ele sensuri. .peratiile care se pot efectua asupra listelor du lu "nlantuite sunta aceleasi ca pentru listele simplu "nlantuite, adica: adaugarea unui element la lista, stergerea unui element din lista si cautarea dupa anumite criterii. 'entru toate aceste operatii se considera ca exista o varia ila, p, care memoreaza "nceputul listei (adresa primului element), iar elementele sunt definite prin urmatoarea structura: struct element /int data+ struct element 0next, 0prev+
1 0p, 0*, 0aux, el+ unde p va fi utilizata pentru memorarea primului element, q va fi utilizat pentru parcurgerea listei iar aux se va folosi la crearea unui nou element "n lista+ el este utilizat doar pentru a avea dimensiunea unui element, necesara pentru functia malloc. 1. Adaugarea unui element la nceputul listei 'entru a insera un element la "nceputul listei tre uie alocat spatiu de memorie pentru un nou element si creata legatura "ntre noul element si primul element din lista. Apoi tre uie mutat "nceputul listei pentru a indica noul element. 2nstructiunile sunt: aux 3 (element 0) malloc (sizeof(el))+ cin 44 aux-5data+ aux-5next 3 p+ aux-5prev 3 p-5prev+ p-5prev 3 aux+ p3aux+ 2. Adaugarea unui element la sfrsitul listei 'entru aceasta operatie tre uie parcursa lista p%na la ultimul element care va fi legat de un element nou creat. 2nstructiunile sunt: * 3 p+ 6$ile (*-5next 73 8(--) * 3 *-5next+ aux 3 (element 0) malloc (sizeof(el))+ cin 44 aux-5data+ aux-5next 3 8(--+ *-5next 3 aux+
aux-5prev 3 *+ 3. Adaugarea unui element dupa unui element care ndeplineste o anumita conditie 'entru aceasta operatie tre uie parcursa lista p%na la gasirea elementui cautat. Apoi tre uie creat un nou element si se vor crea legaturile. Situatia tre uie tratata "n mod diferit pentru primul element fata de celelalte, deoarece inserarea unui element "naintea primului element al listei presupune mutarea "nceputului listei. 2nstructiunile sunt: cout 44 92ntroduceti elementul din lista:+ cin 55 n+ if (p-5data 33 n) /aux 3 (element 0) malloc (sizeof(el))+ cin 44 aux-5data+ aux-5next 3 p+ p-5prev 3 aux+ p3aux+1 else /* 3 p+ 6$ile (*-5data 73 n) * 3 *-5next+ aux 3 (element 0) malloc (sizeof(el))+ cin 44 aux-5data+ aux-5next 3 *-5next+ *-5next-5prev 3 aux+ *-5next 3 aux+ aux-5prev 3 *+ 1
4. Stergerea unui element din lista 'resupune crearea legaturii "ntre elementul anterior elementului sters si cel urmator. Se va face distictie "ntre primul element si celelalte elemente din lista. cout 44 92ntroduceti elementul pe care doriti sa il stergeti:+ cin 55 n+ if (p-5data 33 n) /aux 3 p+ p 3 p-5next+ free(aux)+ 1 else /* 3 p+ 6$ile (*-5next-5data 73 n) ;;daca data din elementul urmator este egala cu n * 3 *-5next+ aux 3 *-5next+ *-5next 3 *-5next-5next+ *-5next-5next-5prev 3 *+ free(aux)+ 1
'.Liste circulare sim%lu inlantuite Sunt similare listelor simplu "nlantuite, dar ultimul element este legat de primul. .peratiile sunt similare, iar diferentele apar doar la prelucrarea ultimului element (adaugarea unui element la sf%rsitul listei, stergerea acestuia), precum si la conditia de oprire la parcurgerea listei, deoarece adresa memorata de ultimul element nu mai este 8(--, ci este adresa "nceputului listei. &lementele sunt definite prin urmatoarea structura: struct element /int data+ struct element 0next+ 1 0p, 0*, 0aux, el+ unde p va fi utilizata pentru memorarea primului element, q va fi utilizat pentru parcurgerea listei iar aux se va folosi la crearea unui nou element "n lista+ el este utilizat doar pentru a avea dimensiunea unui element, necesara pentru functia malloc. 1. Adaugarea unui element la nceputul listei 'entru a insera un element la "nceputul listei tre uie alocat spatiu de memorie pentru un nou element si creata legatura "ntre noul element si primul element din lista, precum si legatura "ntre ultimul element din lista si noul element creat. Apoi tre uie mutat "nceputul listei pentru a indica noul element. 2nstructiunile sunt: * 3 p+ 6$ile (*-5next 73 p)
* 3 *-5next+ ;; * va indica ultimul element din lista aux 3 (element 0) malloc (sizeof(el))+ cin 44 aux-5data+ aux-5next 3 p+ *-5next 3 aux+ p3aux+ 2. Adaugarea unui element la sfrsitul listei 'entru aceasta operatie tre uie parcursa lista p%na la ultimul element care va fi legat de un element nou creat. 2nstructiunile sunt: * 3 p+ 6$ile (*-5next 73 p) * 3 *-5next+ aux 3 (element 0) malloc (sizeof(el))+ cin 44 aux-5data+ aux-5next 3 p+ *-5next 3 aux+ (.Liste circulare du)lu inlantuite Sunt similare listelor du lu "nlantuite, dar primul si ultimul element sunt legate "ntre ele..peratiile sunt similare, iar diferentele apar la prelucrarea primului si ultimului element (adaugarea unui element la "nceput;sf%rsit, stergerea acestuia), precum si la conditia de oprire la parcurgerea listei, deoarece adresa memorata de ultimul element nu mai este 8(--, ci este adresa "nceputului listei. &lementele sunt definite prin urmatoarea structura: struct element
/int data+ struct element 0next, 0prev+ 1 0p, 0*, 0aux, el+ unde p va fi utilizata pentru memorarea primului element, q va fi utilizat pentru parcurgerea listei iar aux se va folosi la crearea unui nou element "n lista+ el este utilizat doar pentru a avea dimensiunea unui element, necesara pentru functia malloc. 1. Adaugarea unui element la nceputul listei 'entru a insera un element la "nceputul listei tre uie alocat spatiu de memorie pentru un nou element si creata legatura "ntre noul element si primul element din lista, precum si legatura "ntre ultimul element din lista si noul element creat. Apoi tre uie mutat "nceputul listei pentru a indica noul element. 2nstructiunile sunt: aux 3 (element 0) malloc (sizeof(el))+ cin 44 aux-5data+ aux-5next 3 p+ p-5prev-5next 3 aux+ aux-5prev 3 p-5prev+ p-5prev 3 aux+ p3aux+ 2. Adaugarea unui element la sfrsitul listei 'entru aceasta operatie tre uie parcursa lista p%na la ultimul element care va fi legat de un element nou creat. 2nstructiunile sunt:
* 3 p+ 6$ile (*-5next 73 8(--) * 3 *-5next+ aux 3 (element 0) malloc (sizeof(el))+ cin 44 aux-5data+ *-5next 3 aux+ aux-5prev 3 *+ aux-5next 3 p+ p-5prev 3 aux+