Laboratorul 2: Liste

1. Obiectivele laboratorului

  • Intelegerea conceptului de functionare si implementarea unor liste dublu inlantuite si circulare
  • Implementarea unor functii individuale de lucru cu aceste structuri de date.

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

  • Liste simplu inlantuite - Elementele au o singura legatura catre urmatorul element introdus, iar ultimul element pointeaza catre NULL.

  • Liste dublu inlantuite - Elementele au dubla legatura catre precedentul si antecedentul, capul listei pointand spre NULL si ultimul element de asemenea.

  • Liste circulare - Pot fi simplu sau dublu inlantuite cu proprietatea ca ultimul element pointeaza spre primul.

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

  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.
sda-aa/laboratoare/03.txt · Last modified: 2021/03/16 21:25 by cristian.rusu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0