Differences

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

Link to this comparison view

sd-ca:laboratoare:lab-03 [2025/03/18 16:02]
andrei.pirlea [LinkedList (conținut din laboratorul precedent)]
sd-ca:laboratoare:lab-03 [2025/03/18 16:23] (current)
andrei.pirlea [Exerciții]
Line 40: Line 40:
  
 Asupra unei liste înlănțuite ar trebui să putem executa urmatoarele operații: Asupra unei liste înlănțuite ar trebui să putem executa urmatoarele operații:
-  * ''<​nowiki>​void add_nth_node(struct LinkedList* list, int n, void* new_data);</​nowiki>''​ adaugă pe poziția n în listă elementul ''​new_data''​. Adăugarea presupune ​modificarea câmpului ''​next''​ al nodului în urma căruia se va adăuga noul nod, cât și a câmpului ''​next''​ al nodului adăugat pentru a face legăturile necesare ca lista sa funcționeze corect. Dacă nodul este adăugat pe prima poziție, atunci el va deveni ''​head''​-ul listei, iar dacă este adăugat pe ultima poziție, el va deveni ''​tail''​-ul listei. //​Complexitate''​O(n)''​. Dacă se adaugă elementul în capul sau coada listei, se obține o complexitate mai buna: ''​O(1)''​.//​+  * ''<​nowiki>​void add_nth_node(struct LinkedList* list, int n, void* new_data);</​nowiki>'' ​adaugă pe poziția n în listă elementul ''​new_data''​. 
 +Adăugarea presupune: ​
  
-  * ''<​nowiki>​struct Node* remove_nth_node(struct LinkedList* list, int n);</​nowiki>​'' ​șterge și întoarce al ''​n''​-lea element ​al listei. Operația presupune modificarea listei astfel încât între nodurile vecine celui eliminat să se refacă legaturile pentru a permite listei sa funcționeze în continuare. Daca nu există un nod următor, ''​head'' ​va deveni NULL, iar lista va fi goală. Dacă nodul eliminat era ''​head-ul''​ listei, atunci succesorul său îi va lua locul. Analog pentru ultimul nod, însă în această situație, nodul precedent devine ''​tail''​. //​Complexitate:​ ''​O(n)''​. Dacă se șterge primul nod, se obține o complexitate mai buna: ''​O(1)''​. Aceeași complexitate se obține și dacă lista este dublu înlănțuită și se șterge ultimul ​nod.//+1modificarea câmpului ​''​next''​ al nodului în urma căruia se va adăuga noul nod
  
-  ​* ''<​nowiki>​int get_size(struct LinkedList* list);</​nowiki>''​ întoarce numărul curent de elemente stocate în listă. //​Complexitate:​ ''​O(1)''//​+2) campul ''​next''​ al nodului adăugat pentru a face legăturile necesare ca lista sa funcționeze corect.  
 + 
 +3) Dacă nodul este adăugat pe prima poziție, atunci el va deveni ''​head''​-ul listei 
 + 
 +4) Dacă este adăugat pe ultima poziție, el va deveni ''​tail''​-ul listei.  
 + 
 +//​Complexitate:​ ''​O(n)''​. Dacă se adaugă elementul în capul sau coada listei, se obține o complexitate mai buna: ''​O(1)''​.//​ 
 + 
 +  * ''<​nowiki>​struct Node* remove_nth_node(struct LinkedList* list, int n);</​nowiki>''​ - șterge și întoarce al ''​n''​-lea element al listei.  
 + 
 +Operația presupune:​ 
 + 
 +1) modificarea listei astfel încât între nodurile vecine celui eliminat să se refacă legaturile pentru a permite listei sa funcționeze în continuare 
 + 
 +2) Daca nu există un nod următor, ''​head''​ va deveni NULL, iar lista va fi goală.  
 + 
 +3) Dacă nodul eliminat era ''​head-ul''​ listei, atunci succesorul său îi va lua locul. Analog pentru ultimul nod, însă în această situație, nodul precedent devine ''​tail''​.  
 + 
 +//​Complexitate:​ ''​O(n)''​. Dacă se șterge primul nod, se obține o complexitate mai buna: ''​O(1)''​. Aceeași complexitate se obține și dacă lista este dublu înlănțuită și se șterge ultimul nod.// 
 + 
 +  ​* ''<​nowiki>​int get_size(struct LinkedList* list);</​nowiki>'' ​întoarce numărul curent de elemente stocate în listă. ​ 
 + 
 +//​Complexitate:​ ''​O(1)'' ​- DACA LISTA CONTINE CAMPUL SIZE IN STRUCTURA//​ 
 + 
 +//​Complexitate:​ ''​O(n)''​ - trebuie parcursa toata lista pentru a afla numarul de noduri ​//
  
 <note important>​ <note important>​
Line 60: Line 85:
 === Listă liniară simplu înlănțuită === === Listă liniară simplu înlănțuită ===
  
-Prezentată în laboratorul precedent.+{{:​sd-ca:​playground:​nod_lista_simplu_inlantuita.png?​direct|}}
  
 === Listă liniară dublu înlănțuită === === Listă liniară dublu înlănțuită ===
Line 123: Line 148:
  
 <​note>​ <​note>​
-Trebuie să vă creați cont de [[https://​beta.lambdachecker.io/​ | Lambda Checker]], dacă nu v-ați creat deja, pe care îl veți folosi la SD pe toată durata semestrului. Aveti grija sa selectati contestul corect la submit, si anume **[[https://​beta.lambdachecker.io/​contest/​69/​problems?​page=1 | Laborator 3]]**+Trebuie să vă creați cont de [[https://​beta.lambdachecker.io/​ | Devmind]], dacă nu v-ați creat deja, pe care îl veți folosi la SD pe toată durata semestrului. Aveti grija sa selectati contestul corect la submit, si anume **[[https://​beta.lambdachecker.io/​contest/​69/​problems?​page=1 | Laborator 3]]**
 </​note>​ </​note>​
  
-[**5p**] Implementaţi,​ plecând de la scheletul de cod, lista circulară dublu înlănțuită. (problema **Circular Doubly LinkedList** pe LambdaChecker)+[**5p**] Implementaţi,​ plecând de la scheletul de cod, lista circulară dublu înlănțuită. (problema **Circular Doubly LinkedList** pe Devmind)
  
-[**2p**] Rezolvati problema desemnata grupei voastre. O veti gasi pe LambdaChecker ​sub forma **SD-CA-LAB-03-GR-31XCA**.+[**2p**] Rezolvati problema desemnata grupei voastre. O veti gasi pe Devmind ​sub forma **SD-CA-LAB-03-GR-31XCA**.
  
 <note important>​**Important!** Problemele folosesc liste dublu inlantuite **liniare**,​ nu circulare!</​note>​ <note important>​**Important!** Problemele folosesc liste dublu inlantuite **liniare**,​ nu circulare!</​note>​
sd-ca/laboratoare/lab-03.1742306542.txt.gz · Last modified: 2025/03/18 16:02 by andrei.pirlea
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