Отпремање презентације траје. Молимо да сачекате

Отпремање презентације траје. Молимо да сачекате

Dinamičke strukture podataka

Сличне презентације


Презентација на тему: "Dinamičke strukture podataka"— Транскрипт презентације:

1 Dinamičke strukture podataka

2 Za zauzimanje i oslobađanje memorije u C++ koriste se operatori new i delete.
Operator new odvaja mem. prostor za smeštanje podatka ili niza podataka i vraća adresu odvojenog prostora. Koristi se na sledeći način: new tip new tip (početna vrednost) new tip [dužina]....[dužina]

3 Dinamički objekti (dinamičke promenljive) se ne pojavljuju u odeljku za opis promenljivih, pa im se ne može pristupati preko imena. Pristup dinamičkoj promenljivoj moguć je samo pomoću pokazivača!

4 1) new tip Memorija se dodeljuje nekom podatku: int *i=new int;

5 2) new tip (početna vrednost)
Memorija se dodeljuje nekom podatku i odmah mu se dodeljuje početna vrednost: int *j=new int(10);

6 3) new tip [dužina]....[dužina]
Memorija se dodeljuje nizu podataka datog tipa: int *a=new int[10];

7 Operator new za razliku od f-ja C-a sam određuje veličinu mem
Operator new za razliku od f-ja C-a sam određuje veličinu mem. prostora i vraća pokazivač na njega. Postoji mogućnost inicijalizacije sa željenim vrednostima i mogućnost izdvajanja mem. prostora za nizove. Ako iz nekog razloga prostor u memoriji ne može biti izdvojen vraća se NULL ili se kod novijih kompajlera greška prijavljuje izuzetkom bad_alloc.

8 Oslobađanje memorijskog prostora izdvojenog operatorom new realizuje se operatorom delete.
Koristi se na sledeći način: delete adresa --- delete i; delete adresa --- delete j; delete []adresa --- delete []a; Ako se ne navedu zagrade [] oslobađa se samo prvi element niza (bez ikakvog upozorenja). Preostali elementi će i dalje zauzimati memorijski prostor ali će biti nedostupni.

9 jedan ceo broj i int *i; i = new int; delete i; i int *i; 10

10 niz od 10 celih brojeva int *a; a=new int[10]; a delete []a;

11 matrica celih brojeva 4x3
int **a; a=new int*[4]; a[0]=new int[3]; a[1]=new int[3]; a[2]=new int[3]; a[3]=new int[3]; delete []a[0]; delete []a[1]; delete []a[2]; delete []a[3]; delete []a;

12 Primer 1: Formirati dinamički jednodimenzionalni niz celih brojeva i prikazati sadržaj niza.
#include <iostream> #include <iomanip> using namespace std; int main() { int *a, n; cout<<"n="; cin>>n; a=new int[n]; if (a==NULL) cout<<"Nedovoljno memorije!"; else for(int i=0; i<n; i++) cout<<"a["<<i<<"]="; cin>>a[i]; } cout<<"\nniz a:"<<endl; int *b=a; for(i=0; i<n; i++) cout<<setw(4)<<*b++; //{cout<<setw(4)<<*b; b++;} delete []a; return 0;

13 Primer 2: Formirati dinamički dvodimenzionalni niz celih brojeva i odrediti najveći element.
#include <iostream> #include <iomanip> using namespace std; int Max(int **x, int y, int z) { int max=x[0][0]; for (int i=0; i<y; i++) for(int j=0; j<z; j++) if(x[i][j]>max) max=x[i][j]; return max; } int main() int **a; int n, m; cout<<"ucitati broj vrsta: "; cin>>n; a=new int *[n]; //niz od n pokazivaca na int cout<<"ucitati broj kolona: "; cin>>m;

14 for (int i=0; i<n; i++)
{ a[i]=new int[m]; //dodeljuje mem. prostor i-toj vrsti matrice for (int j=0; j<m; j++) //ucitava elemente i-te vrste cin>>a[i][j]; } cout<<"max="<<Max(a,n,m); //max. element matrice cout<<"\n matrica a:\n"; //ispis elemenata matrice for(i=0; i<n; i++) cout<<endl; for(int j=0; j<m; j++) cout<<setw(4)<<a[i][j]; for(i=0; i<n; i++) //oslobadjanje memorije koju je zauzimala matrica delete []a[i]; delete []a; return 0;

15


Скинути ppt "Dinamičke strukture podataka"

Сличне презентације


Реклама од Google