Laboratorul 2: Liste
1. Obiectivele laboratorului
2. Ce este o lista?
A. Definitie
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.
Avantaje ale utilizarii listelor:
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.
Definirea nodului unei liste:
typedef struct {
int val;
node_t *next;
} node_t;
B. Clasificare
C. Operatii cu liste
Adaugare la inceputul listei.
Adaugare la sfarsitul listei.
Adaugarea inainte sau dupa un element dat.
Stergerea capului de lista.
Stergerea unui element oarecare din lista.
3. Exercitii
Creati o lista circulara, dublu inlantuita cu 6 angajati ai unei companii, care sa contina urmatoarele referinte: nume, nr de telefon, post.
Scrieti functiile care sa scrie urmatoarele:
Sa introduca un nou angajat dupa al treilea.
Sa introduca un nou angajat inainte de cel care e „mecanic“.
Sa stearga angajatul cu un anumit numar de telefon introdus.
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.
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×3, 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.
Nota: Template pentru codul sursa list-lab2.zip.
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 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.