Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sda-aa:laboratoare:03 [2021/03/16 21:05]
cristian.rusu
sda-aa:laboratoare:03 [2021/03/16 21:25] (current)
cristian.rusu
Line 3: Line 3:
  
 ==== 1. Obiectivele laboratorului ==== ==== 1. Obiectivele laboratorului ====
-  * Înțelegerea ​conceptului de funcționare și implementarea unor liste dublu înlănțuite și circulare +  * Intelegerea ​conceptului de functionare si implementarea unor liste dublu inlantuite si circulare 
-  * Implementarea unor funcții ​individuale de lucru cu aceste structuri de date.+  * Implementarea unor functii ​individuale de lucru cu aceste structuri de date.
  
  
-==== 2. Ce este o listă? ====+==== 2. Ce este o lista? ====
  
-=== A. Definiție ​===+=== A. Definitie ​===
  
-Listele sunt cele mai bune și cele mai simple exemple a unei structuri de date dinamice care folosește ​pointeri la implementarea sa.în mod esențial, trebuie ​înțeles că listele ​funcționează ​ca un vector care se poate mări sau micșora după nevoie, din orice punct al mulțimii ​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.
  
-Avantaje ale utilizării ​listelor: +{{:​sda-aa:​laboratoare:​array_vs_list.png?​600|}} 
-   * Elementele pot fi adăugate ​sau șterse ​din mijlocul listei + 
-   * Nu trebuie ​definită ​mărime inițială, iar memoria se alocă ​pe rândodată ​cu fiecare element ​adăugat+Avantaje ale utilizarii ​listelor: 
 +   * Elementele pot fi adaugate ​sau sterse ​din mijlocul listei. 
 +   * Nu trebuie ​definita ​marime initiala, iar memoria se aloca pe randodata cu fiecare element ​adaugat.
  
 Definirea nodului unei liste: Definirea nodului unei liste:
Line 21: Line 23:
 typedef struct { typedef struct {
      int val;      int val;
-     node *next;+     node_t ​*next;
 } node_t; } node_t;
 </​code>​ </​code>​
Line 27: Line 29:
 === B. Clasificare === === B. Clasificare ===
  
-  * Liste simplu ​înlănțuite ​- Elementele au o singură legătură către următorul ​element introdus, iar ultimul +  * Liste simplu ​inlantuite ​- Elementele au o singura legatura catre urmatorul ​element introdus, iar ultimul element ​pointeaza catre NULL
-element ​pointează către ​NULL.+ 
 +{{:​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 simplu înlănțuite+{{:​sda-aa:​laboratoare:​doublelist.jpg?​600|}}
  
-  * Liste dublu înlănțuite ​Elementele au dublă legătură către precedentul și antecedentul,​ capul listei pointând +  * Liste circulare ​Pot fi simplu sau dublu inlantuite cu proprietatea ca ultimul element ​pointeaza spre primul.
-spre NULL și ultimul element ​de asemenea+
  
-  * Liste circulare ​Pot fi simplu sau dublu înlănțuite cu proprietatea că ultimul element pointează spre primul.+{{:sda-aa:​laboratoare:​circularlist.png?600|}}
  
-=== C. Operații ​cu liste ===+=== C. Operatii ​cu liste ===
  
-  * Adăugare ​la începutul ​listei +  * Adaugare ​la inceputul ​listei. 
-  * Adăugare ​la sfârsitul ​listei +  * Adaugare ​la sfarsitul ​listei. 
-  * Adăugarea înainte ​sau după un element dat +  * Adaugarea inainte ​sau dupa un element dat. 
-  * Ștergerea ​capului de listă +  * Stergerea ​capului de lista. 
-  * Ștergerea ​unui element oarecare din listă+  * Stergerea ​unui element oarecare din lista.
  
 ==== 3. Exercitii ==== ==== 3. Exercitii ====
  
-  - Creați ​listă circulară,​dublu ​inlănțuită ​cu 6 angajați ​ai unei companii, care să conțină următoarele referințe: nume, nr de telefon, post. +  - Creati ​lista circulara, dublu inlantuita ​cu 6 angajati ​ai unei companii, care sa contina urmatoarele referinte: nume, nr de telefon, post. 
-    * Scrieți funcțiile ​care să scrie urmatoarele:​ +    * Scrieti functiile ​care sa scrie urmatoarele:​ 
-    * Să introducă ​un nou angajat ​după al treilea. +    * Sa introduca ​un nou angajat ​dupa al treilea. 
-    * Să introducă ​un nou angajat inainte de cel care e „mecanic“. +    * Sa introduca ​un nou angajat inainte de cel care e „mecanic“. 
-    * Să steargă ​angajatul cu un anumit ​număr ​de telefon introdus. +    * Sa stearga ​angajatul cu un anumit ​numar de telefon introdus. 
-  - Să se creeze o listă ​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. Fișierul ​se va da ca parametru ​în linia de comandă+  - 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
-  - Să se construiasca o lista liniara simplu inlantuita cu elemente numere intregi. ​Să se afișeze și apoi să 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. 
-  - Adunaţi ​2 polinoame rare, reprezentând ​fiecare polinom printr-o ​listă înlănţuită, unde fiecare nod va conţine ​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.
  
-**Nota:​** ​Implementati toti algoritmii in fisiere separate (.c si .h) si apoi apelati-le din main.c+**Nota:​** ​Template pentru codul sursa {{:sda-aa:​laboratoare:​list-lab2.zip|}}.
  
  
-==== 4. Probleme ​opţionale - de interviu====+==== 4. Probleme ​optionale, ​de interviu====
  
-  - Se dă listă ​simplu ​înlănţuită(primiţi ​doar un pointer ​către ​primul element). ​Verificaţi dacă lista conţine ​buclă. (o listă ​simplu ​înlănţuită conţine ​buclă ​⇒ niciun element nu are legătura ​NULL) +  - Se da lista simplu ​inlantuita ​(primiti ​doar un pointer ​catre primul element). ​Verificati daca lista contine ​bucla. (o lista simplu ​Inlantuita contine ​bucla ⇒ niciun element nu are legatura ​NULL) 
-  - Se dau două liste(pentru fiecare ​listă ​- pointer ​către ​primul element) ​în formă ​de Y(listele se intersectează, ultimele k elemente sunt comune). ​Aflaţi ​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 dă listă ​cu 2n+1 elemente, fiecare element ​conţine câte un întreg. Toate valorile ​întregi ​apar de două ori în listăexcepţie facând ​una singurăAflaţi ​acea valoare.+  - Se da lista cu 2n+1 elemente, fiecare element ​contine cate un intreg. Toate valorile ​intregi ​apar de doua ori in listaexceptie facand ​una singuraAflati ​acea valoare.
  
sda-aa/laboratoare/03.1615921555.txt.gz · Last modified: 2021/03/16 21:05 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