Table of Contents

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:

Definirea nodului unei liste:

typedef struct {
     int val;
     node_t *next;
} node_t;

B. Clasificare

C. Operatii cu liste

3. Exercitii

  1. 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.
  2. 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.
  3. Sa se construiasca o lista liniara simplu inlantuita cu elemente numere intregi. Sa se afiseze si apoi sa se stearga din lista elementele pare.
  4. 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).
  5. 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

  1. 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)
  2. 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.
  3. 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.