This shows you the differences between two versions of the page.
sda-aa:laboratoare:03 [2021/03/16 21:17] cristian.rusu |
sda-aa:laboratoare:03 [2021/03/16 21:25] (current) cristian.rusu |
||
---|---|---|---|
Line 13: | Line 13: | ||
Listele sunt cele mai bune si cele mai simple exemple a unei structuri de date dinamice care foloseste pointeri la implementarea sa. In mod esential, trebuie inteles ca listele functioneaza ca un vector care se poate mari sau micsora dupa nevoie, din orice punct al multimii sale de elemente. | Listele sunt cele mai bune si cele mai simple exemple a unei structuri de date dinamice care foloseste pointeri la implementarea sa. In mod esential, trebuie inteles ca listele functioneaza ca un vector care se poate mari sau micsora dupa nevoie, din orice punct al multimii sale de elemente. | ||
- | {{:sda-aa:laboratoare:array_vs_list.png?500|}} | + | {{:sda-aa:laboratoare:array_vs_list.png?600|}} |
Avantaje ale utilizarii listelor: | Avantaje ale utilizarii listelor: | ||
- | * Elementele pot fi adaugate sau sterse din mijlocul listei | + | * Elementele pot fi adaugate sau sterse din mijlocul listei. |
- | * Nu trebuie definita o marime initiala, iar memoria se aloca pe rand, odata cu fiecare element adaugat | + | * Nu trebuie definita o marime initiala, iar memoria se aloca pe rand, odata cu fiecare element adaugat. |
Definirea nodului unei liste: | Definirea nodului unei liste: | ||
Line 23: | Line 23: | ||
typedef struct { | typedef struct { | ||
int val; | int val; | ||
- | node *next; | + | node_t *next; |
} node_t; | } node_t; | ||
</code> | </code> | ||
Line 31: | Line 31: | ||
* Liste simplu inlantuite - Elementele au o singura legatura catre urmatorul element introdus, iar ultimul element pointeaza catre NULL. | * Liste simplu inlantuite - Elementele au o singura legatura catre urmatorul element introdus, iar ultimul element pointeaza catre NULL. | ||
- | {{:sda-aa:laboratoare:simplelist.png?500|}} | + | {{:sda-aa:laboratoare:simplelist.png?600|}} |
* Liste dublu inlantuite - Elementele au dubla legatura catre precedentul si antecedentul, capul listei pointand spre NULL si ultimul element de asemenea. | * Liste dublu inlantuite - Elementele au dubla legatura catre precedentul si antecedentul, capul listei pointand spre NULL si ultimul element de asemenea. | ||
- | {{:sda-aa:laboratoare:doublelist.jpg?500|}} | + | {{:sda-aa:laboratoare:doublelist.jpg?600|}} |
* Liste circulare - Pot fi simplu sau dublu inlantuite cu proprietatea ca ultimul element pointeaza spre primul. | * Liste circulare - Pot fi simplu sau dublu inlantuite cu proprietatea ca ultimul element pointeaza spre primul. | ||
- | {{:sda-aa:laboratoare:circularlist.png?500|}} | + | {{:sda-aa:laboratoare:circularlist.png?600|}} |
=== C. Operatii cu liste === | === C. Operatii cu liste === | ||
- | * Adaugare la inceputul listei | + | * Adaugare la inceputul listei. |
- | * Adaugare la sfarsitul listei | + | * Adaugare la sfarsitul listei. |
- | * Adaugarea inainte sau dupa un element dat | + | * Adaugarea inainte sau dupa un element dat. |
- | * Stergerea capului de lista | + | * Stergerea capului de lista. |
- | * Stergerea unui element oarecare din lista | + | * Stergerea unui element oarecare din lista. |
==== 3. Exercitii ==== | ==== 3. Exercitii ==== | ||
Line 59: | Line 59: | ||
- Sa se creeze o lista liniara simplu inlantuita care contine elemente intregi citite dintr-ul fisier text. Se citeste apoi o valoare intreaga x. Sa se stearga primul nod care contine valoarea x. Fisierul se va da ca parametru In linia de comanda. | - Sa se creeze o lista liniara simplu inlantuita care contine elemente intregi citite dintr-ul fisier text. Se citeste apoi o valoare intreaga x. Sa se stearga primul nod care contine valoarea x. Fisierul se va da ca parametru In linia de comanda. | ||
- Sa se construiasca o lista liniara simplu inlantuita cu elemente numere intregi. Sa se afiseze si apoi sa se stearga din lista elementele pare. | - Sa se construiasca o lista liniara simplu inlantuita cu elemente numere intregi. Sa se afiseze si apoi sa se stearga din lista elementele pare. | ||
- | - Adunati 2 polinoame rare, reprezentand fiecare polinom printr-o lista Inlantuita, unde fiecare nod va contine datele pentru un coeficient şi o putere (de exemplu: 5 x3, coeficient = 5, putere = 3). | + | - Adunati 2 polinoame rare, reprezentand fiecare polinom printr-o lista Inlantuita, unde fiecare nod va contine datele pentru un coeficient şi o putere (de exemplu: 5x3, coeficient = 5, putere = 3). |
- Pentru laboratorul de liste inlantuite vom porni de la o arhiva cu un schelet de laborator. Nu veti scrie codul de la zero ci veti implementa cateva functii in fisierul list.c. | - Pentru laboratorul de liste inlantuite vom porni de la o arhiva cu un schelet de laborator. Nu veti scrie codul de la zero ci veti implementa cateva functii in fisierul list.c. | ||
Line 67: | Line 67: | ||
==== 4. Probleme optionale, de interviu==== | ==== 4. Probleme optionale, de interviu==== | ||
- | - Se da o lista simplu inlantuita(primiti doar un pointer catre primul element). Verificati daca lista contine o bucla. (o lista simplu Inlantuita contine o bucla ⇒ niciun element nu are legatura NULL) | + | - Se da o lista simplu inlantuita (primiti doar un pointer catre primul element). Verificati daca lista contine o bucla. (o lista simplu Inlantuita contine o bucla ⇒ niciun element nu are legatura NULL) |
- | - Se dau doua liste(pentru fiecare lista - pointer catre primul element) In forma de Y(listele se intersecteaza, ultimele k elemente sunt comune). Aflati valoarea lui k. | + | - Se dau doua liste(pentru fiecare lista - pointer catre primul element) in forma de Y (listele se intersecteaza, ultimele k elemente sunt comune). Aflati valoarea lui k. |
- | - Se da o lista cu 2n+1 elemente, fiecare element contine cate un Intreg. Toate valorile Intregi apar de doua ori In lista, exceptie facand una singura. Aflati acea valoare. | + | - Se da o lista cu 2n+1 elemente, fiecare element contine cate un intreg. Toate valorile intregi apar de doua ori in lista, exceptie facand una singura. Aflati acea valoare. |