1. CRITERII DE CLASIFICARE A DATELOR Alocarea memoriei interne Structuri statice Dimensiunea zonei alocate este fixa. Alocarea ei se face in timpul compilarii , in functie de modul in care a fost declarata stuctura, iar in timpul executiei programului nu mai poate fi modificata Structuri dinamice Dimensiunea zonei alocate nu este fixa . Alocarea sau eliberarea zonelor de memorie folosita de structura se face in timpul executiei programului , in functie de numarul de componente ale structurii
2. Implementarea in limbajul de programare Structuri implicite Structura creata la nivel conceptual este implementata la nivelul limbajului de programare. Reprezentarea sa este implicita si nu mai necesita informatii suplimentare pentru localizarea componentelor Structuri explicite Structura creata la nivel conceptual nu este implementata la nivelul limbajului de programare. Reprezentarea se va face folosind structurile implicite implementate, in limbaj, fiind necesare informatii suplimentare pentru localizarea componentelor
3. Dispunerea elementelor in memorie Structuri contigue Elementele sunt dispuse in zone contigue de memorie, care permie localizarea uneia dintre ele folosind o adresa de referinta si deplasarea fata de adresa de referinta Structuri dispersate Elementele sunt dispuse in zone dispersate de memorie, pentru a putea localiza elementele in structura, trebuie sa se memoreze pentru fiecare element si adresa la care se gaseste
4. Dezavantaje structuri statice: deoarece alocarea zonei de memorie se face la compilarea programului, iar in timpul executiei programului pot sa apara urmatoarele cazuri: - spatiul alocat structurii este insuficient - spatiul alocat structurii este mult mai mare decat necesar Avantaje structurii dinamice :alocarea memoriei se face in timpul executiei programului, in functie de numarul de componente ale structurii la acel moment, iar acesta poate fi dezafectat la cererea utilizatorului
5.
6. La nivel conceptual, toate aceste colectii de date reprezinta un sir de date de acelasi tip, care trebuie prelucrate prin inserarea si extragerea de elemente, pastrandu-se o anumita ordine de aranjare a elementelor. Daca la nivel logic s-ar alege solutia de a grupa aceste elemente intr-o structura de date de tip vector, algoritmii de prelucrare, vor necesita multe deplasari de elemente care consuma timp de prelucrare In cazul structurilor care trebuie sa-si pastreze in timpul exploatarii ordonarea dupa un anumit criteriu, mecanismul vectorilor este greoi.In aceste cazuri, se poate alege ca solutie de implementare a structurii de date lista , care nu este o structura fizica de organizare a datelor, ci o structura logica , ce degreveaza programatorul de ordonarea dupa indice a structurii, impusa de vectori. Definitia structurii de date de tip lista Lista= este o structura de date logica, liniara, cu date omogene, in care fiecare element are un succesor si un predecesor, exceptand primul element, care nu are decat succesor si ultimul element care nu are decat predecor
7. Considerăm un nod al listei simplu înlănţuite de forma Type pointer= ^nod nod = record info:tip; urm :pointer; end; Var prim:pointer; Secventa de instructiuni Pascal pentru definirea unui nod al listei Vom utiliza urmatoarele notatii: PRIM – pointerul primului nod al listei, ULT - ultimul nod al listei TEMP –pointer temporar de lucru Secventa de instructiuni C++ pentru definirea unui nod al listei Informatia utila Struct nod { tip_data info nod* urm} Nod* prim Adresa elem.urm.
8. Lista simplu inlantuita Lista dublu inlantuita L a ={(d i ,s i )|d i D,s i P} L s ={(p i ,d i ,s i )|d i D,p i ,s i P}
9. Stiva (lista LIFO) Coada (lista FIFO) Operatii pe stiva: inserare in capul stivei, stergere din capul stivei, citirea din capul stivei. Operatii specifice: inserare in spate, stergere din fata cozii, citirea din fata cozii. LISTE PARTICULARE
10.
11. 5 Prim 7 10 9 Q Ultim NIL NIL INSERARE IN SPATELE LISTEI Pascal New(Q); x:=9; q^.inf:=x; q^.urm:=NIL; ultim^.urm:=q; ultim:=q C++ q=new(nod); x=9; q->info=x; q->urm:=NULL; ultim->urm=q ultim:=q;
12. 5 Prim 7 m INSERARE DUPA UN NOD (M) Pascal New(p); x:=9; p^.inf:=x; p^.urm:=m^.urm; m^.urm:=p C++ p=new(nod); x=9; p->info=x; p->urm:=m->urm; m->=urm=p; 9 P 10 Ultim NIL 9
13. 5 Prim 10 Ultim NIL temp 7 9 Prim STERGEREA PRIMULUI NOD Pascal temp:=prim prim:=prim^.urm dispose(temp) C++ temp=prim prim:=prim->urm delete (temp)
14. 5 Prim 10 ultim NIL 7 9 NIL STERGEREA ultimului NOD al listei ultim P Pascal temp:=ultim p^.urm:=nil; dispose(temp) ultim:=p C++ temp=ultim p->urm=NULL; delete(temp) ultim:=p
15. 6 P 2 Prim NIL NIL INSERARE IN FATA LISTEI DUBLU INLANTUITE Pascal New(P); x:=6; p^.inf:=x; p^.urm:=prim; p^.ant:=nil; prim^.ant:=p; prim:=p C++ p=new(nod); x=6; p->inf=x; p->urm=prim; p->ant=NULL; prim->ant=p; prim=p 8 7 Ultim NIL info ant urm
16. 6 P 7 Ultim NIL 2 Prim NIL NIL INSERARE IN SPATELE LISTEI DUBLU INLANTUITE Pascal New(P); x:=6; p^.inf:=x; p^.urm:=NIL; p^.ant:=ULTIM; ultim^.urm:=p ultim:=p C++ p=new(nod); x=6; p->inf=x; p->urm=NULL; p->ant=ultim; ultim->urm=p ultim=p 8 info ant urm
17. 6 Q 7 Ultim NIL P INSERARE DUPA UN NOD OARECARE (dupa primul nod)/ LISTA DUBLU INLANTUITA Pascal New(q); x:=6; q^.inf:=x; q^.urm:=prim^.urm; q^.ant:=prim^.urm; prim^.urm^.ant:=q prim^.urm:=q C++ p=new(nod); x:=6; q->inf=x; q->urm=prim->urm; q->ant=prim->urm; prim->urm->ant=q prim->urm=q 8 2 Prim NIL info ant urm
18. 6 7 Ultim NIL P STERGEREA UNUI NOD DIN INTERIORUL LISTEI DUBLU INLANTUITE (stergerea nodului P) Pascal temp:=p prim^.urm:=p^.urm; p^.urm.^ant:=p^.ant; dispose(temp) C++ temp=p prim->urm=p->urm; p->urm->ant=p->ant; delete(temp ) 8 2 Prim NIL info ant urm