You are on page 1of 14

Structuri de date alocate dinamic

Alocarea dinamic a memoriei

Alocarea memoriei interne

Structuri statice

Structuri dinamice

Structuri statice
Dimensiunea zonei alocate este fix. Alocarea ei se face n timpul compilrii, n funcie de modul n care a fost declarat structura, iar n timpul execuiei programului nu mai poate fi modificat.

Structuri dinamice
Dimensiunea zonei alocate nu este fix. Alocarea sau eliberarea zonelor de memorie folosite de structur se face n timpul execuiei programului, n funcie de numrul de componente ale structurii.

Alocarea dinamic a memoriei


new
Operator unar care returneaz un pointer la zona de memorie alocat dinamic. Dac nu exist suficient memorie i alocarea nu reuete va returna pointerul NULL

delete
Operator unar care elibereaz zona de memorie spre care pointeaz argumentul su

Sintaxa new
tipdata_pointer = new tipdata;
tipdata_pointer = new tipdata(val_initializare); //pentru iniializarea datei pentru care se aloc memorie
dinamic

tipdata_pointer = new tipdata[nr_elem]; //alocarea


memoriei pentru un tablou

delete
delete tipdata_pointer;

delete [nr_elem] tipdata_pointer; //eliberarea memoriei pentru tablouri

Exemple
1. S se aloce dinamic memorie pentru o dat de tip ntreg:
int *p; p=new int; //prelucrari cu *p delete p;

2. S se aloce dinamic memorie pentru o dat real, dubl precizie, initializnd-o cu valoarea -7.2.
double *p; p=new double(-7.2); //prelucrari cu *p delete p;

3. S se aloce dinamic memorie pentru un vector de 10 elemente reale.


double *vector; vector=new double[10]; delete [10] vector;

Exemple
4. S se aloce dinamic memorie pentru o matrice cu 3 linii si 5 coloane de tip double. double (*a)[5]=new double [3][5]; //prelucrari cu a a[2][2]==4.9 delete [3] a;

5. S se aloce dinamic memorie pentru o structur cu dou campuri: unul ntreg iar cellat de tip caracter.
struct articol {int nr; char c; }; articol *pa; pa=new articol; cout<<endl<<"nr=";cin>>pa->nr; cout<<endl<<"caracterul ";cin>>pa->c; cout<<endl<<pa->nr<<" "<<pa->c<<" tot la adresa "<<pa<<endl; delete pa;

Exerciii
Citii i afiai variabile alocate dinamic de tip

numeric. Determinai dublul acestora.

Citii i afiai tablouri uni si bidimensionale

alocate dinamic.
Citii i afiai variabile de tip struct alocate

dinamic. De exemplu informaii despre un produs.

Pentru fiecare eliberai spaiul de memorie.

Liste
Lista este o structur de date logic, liniar, cu date omogene, n care fiecare element are un succesor i un predecesor, exceptnd primul element, care nu are dect succesor i ultimul element, care nu are dect un predecesor. Elementele unei liste se numesc noduri.

Liste
simplu nlnuite

liniare
circulare liniare

Liste
dublu nlnuite

circulare

Liste liniare simplu nlnuite


Dac ntre nodurile unei liste exist o singur relaie de

ordine atunci spunem c lista este simplu nlnuit. Definim asfel un nod al listei struct nod {tip info; nod *urm;}; Referirea la cmpurile nodului se face astfel: elem->info; elem->urm; unde elem este de tip nod.

Crearea unei liste simplu nlnuite


void cre_ad() //functia de creare si adaugare a unui nou element {nod *c; if(!prim) //daca lista este vida (p==0) se aloca primul nod {prim=new nod; cout<<"valoare primului nod "; cin>>prim->info; ultim=prim; //la creare primul si ultimul nod vor fi identici } else //altfel se adauga un nou element la sfarsit { c=new nod; //se aloca un nou nod cout<<"informatia utila :"; cin>>c->info; //se completeaza campul informatie utila ultim->urm=c; //se adauga dupa ultimul nod ultim=c; //se stabileste noul nod c ca fiind ultimul } ultim->next=0; //campul adresa urmatoare a ultimului nod este 0 }

Afiare list
void afis() //functia de afisare parcurge elementele cu afisare {nod *c; c=prim; //se porneste de la primul nod din lista while(c) //cat timp c retine o adresa nenula {cout<<c->info<<" ";//se afiseza campul informatie utila c=c->next;} //se avanseaza la urmatoarea adresa, la urmatorul nod cout<<endl; }

You might also like