150 likes | 304 Views
Structuri de date alocate dinamic. Alocarea dinamică a memoriei. Alocarea dinamică a memoriei. Sintaxa. new. tipdata_pointer = new tipdata; tipdata_pointer = new tipdata(val_initializare); // pentru inițializarea datei pentru care se alocă memorie dinamică
E N D
Structuri de date alocate dinamic Alocarea dinamică a memoriei
Sintaxa new tipdata_pointer = new tipdata; tipdata_pointer = new tipdata(val_initializare); //pentru inițializarea 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 *pdelete p; 2. Să se aloce dinamic memorie pentru o dată reală, dublă precizie, initializând-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 celălat 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;
Exerciții • Citiți și afișați variabile alocate dinamic de tip numeric. Determinați dublul acestora. • Citiți și afișați tablouri uni si bidimensionale alocate dinamic. • Citiți și afișați variabile de tip struct alocate dinamic. De exemplu informații despre un produs. • Pentru fiecare eliberați spațiul de memorie.
Liste Lista este o structură de date logică, liniară, cu date omogene, în care fiecare element are un succesor și un predecesor, exceptând primul element, care nu are decât succesor și ultimul element, care nu are decât un predecesor. Elementele unei liste se numesc noduri.
Liste liniare simplu înlănțuite • Dacă între nodurile unei liste există o singură relație de ordine atunci spunem că lista este simplu înlănțuită. Definim asfel un nod al listei • struct nod {tip info; nod *urm;}; Referirea la câmpurile nodului se face astfel: elem->info; elem->urm; unde elem este de tip nod.
Crearea unei liste simplu înlănțuite voidcre_ad() //functia de creare si adaugare a unuinouelement {nod *c; if(!prim) //daca lista este vida (p==0) se aloca primulnod {prim=new nod; cout<<"valoareprimuluinod "; cin>>prim->info; ultim=prim; //la creare primul si ultimulnodvor fi identici } else //altfel se adauga un nouelement la sfarsit { c=new nod; //se aloca un nounod cout<<"informatiautila :"; cin>>c->info; //se completeazacampulinformatieutila ultim->urm=c; //se adaugadupaultimulnod ultim=c; //se stabilestenoulnod c cafiindultimul } ultim->next=0; //campuladresaurmatoare a ultimuluinod este 0 }
Afișare 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; }