130 likes | 286 Views
Structuri de date alocate dinamic. Alocarea dinamică a memoriei. Alocarea dinamică a memoriei. Sintaxa. new. n ew
E N D
Structuri de date alocate dinamic Alocarea dinamică a memoriei
Sintaxa new • new tipdata_pointer = new tipdata; tipdata_pointer = new tipdata(val_initializare); //pentru initializarea datei pentru care se aloca memorie dinamica tipdata_pointer = new tipdata[nr_elem]; //alocarea memoriei pentru un tablou • delete deletetipdata_pointer; delete [nr_elem] tipdata_pointer; //eliberarea memoriei pentru tablouri delete
Exemple • Să se aloce dinamic memorie pentru o dată de tip întreg: int *pint; pint=new int; //prelucrari cu *pint delete pint; • Să se aloce dinamic memorie pentru o dată reala, dublă precizie, initializând-o cu valoarea -7.2. double *p; p=new double(-7.2); //prelucrari cu *p delete p; • Să se aloce dinamic memorie pentru un vector de m elemente reale. double *vector; vector=new double[m]; delete [m] vector;
Exemple • 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 de exemplu a[2][2]==4.9 delete [3] a; • Să se aloce dinamic memorie pentru o structură cu doua 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 {tipinfo; 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 {pprim=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; }