Structuri De Date Alocate Dinamic

8,769 views
8,622 views

Published on

Published in: Education, Travel
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
8,769
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
143
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Structuri De Date Alocate Dinamic

  1. 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. 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. 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. 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. 5. STUDIU DE CAZ Scop: identificarea modului in care trebuie sa identificati problemele in care puteti folosi structura de date de tip lista pentru a le rezolva <ul><li>Intr-o biblioteca, exista o colectie de carti organizate in ordinea alfabetica a autorilor.Un cititor poate imprumuta o carte(se extrage din colectie)sau poate inapoia o carte ( se insereaza in colectie).Toate aceste operatii trebuie executate astfel incat sa se pastreze organizarea in ordine alfabetica a autorilor. </li></ul><ul><li>La o benzinarie s-a format o coada de asteptare.Masinile sunt servite in ordinea venirii.Prima masina sosita este prima servita, iar ultima masina venita se aseaza la coada.Toate aceste operatii trebuie executate astfel incat sa se pastreze ordinea in care au sosit masinile si s-au asezat la coada </li></ul><ul><li>Intr-o stiva de carti, volumele sunt asezate in ordine alfabetica a titlurilor.Trebuie extrasa din stiva o carte fara a deranja modul in care sunt ordonate cartile in stiva </li></ul>
  6. 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. 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. 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. 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. 10. Inserare în faţa listei <ul><li>Considerăm o listă simplu înlănţuită în care primul element al listei este recunoscut prin vb. pointer PRIM iar ultimul element al listei ULT </li></ul>Pascal New(temp); read(x); temp^.inf:=x; temp^.urm:=prim; prim:=temp; C++ temp=new(nod); cin>> x temp->info=x; temp->urm:=prim; prim:=temp; Inf.utilă urm Inf.utilă urm Inf.utilă urm Inf.utilă nil PRIM ULT temp
  11. 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. 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. 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. 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. 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. 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. 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. 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
  19. 19. APLICAŢII ALOCARE DINAMICĂ <ul><li>Cuvinte ordonate </li></ul><ul><li>Inmultirea a 2 numere mari </li></ul><ul><li>suma a 2 polinoame </li></ul><ul><li>Inmultirea a 2 polinoame </li></ul><ul><li>Schimbarea sensului sagetilor într-o listă </li></ul><ul><li>stergerea elementelor nule </li></ul>

×