Upload
mihajlo-jonic
View
217
Download
2
Embed Size (px)
Citation preview
1
DINAMIČKI TIPOVI PODATAKA
2
Statičke i dinamičke strukture Statičke i dinamičke strukture podatakapodataka
Statičke strukture- zauzimanje memorijskog prostora vrši se u fazi kompiliranje programa. Jednostavnije su za primenu i brže.
Dinamičke strukture – zauzimanje memorijskog prostora vrši se u fazi izvršavanja programa. memorijski prostor se koristi racionalnije i moguće je menjati strukturu u toku izvršavanja programa.
3
Dinamičke strukture podatakaDinamičke strukture podatakaPrimer korišćenjaPrimer korišćenja
Kao primer gde je prirodnije koristiti dinamičku strukturu podataka umesto statičke uzmimo retku ili slabo popunjenu matricu u kojoj veći broj elemenata ima vrednost nula, a samo su neki elementi različiti od nule.
Umesto statičkog pamćenja cele ovakve matrice pri čemu se za svaki od elemenata (bez obzira da li su u pitanju nule ili ne) rezerviše odgovarajući memorijski prostor, racionalnije je pamtiti samo vrednosti elementa različitih od nule sa podacima o njihovaoj lokaciji u matrici.
U ovom slučaju nije potrebno da se unapred zna broj elemenata matrice.
4
PokazivačiPokazivačiSpecijalni tipovi podataka koji pamte adrese drugih podatak u memoriji.
Najbitnija primena im je da pamte adrese podataka koji se kreiraju u toku izvršenja programa u dinamičkoj zoni memorije.
U većini programskih jezika nad pokazivačima su definisane jedino operacije poređenja ( jednakost i nejednakost ).Jedino programski jezik C uvodi takozvanu adresnu aritmetiku pa su u ovom jeziku nad pokazivačima dozvoljene i operacije:
+, -, +=, -=, ++, --
5
PokazivačiPokazivačiPromenljivon tipa pokazivača se dodeljuje vrednost NIL (prazan pokazivač) koja ne pokazuje ni na jedan podatak u memorijiU različitim ogramskim jezicima se koriste različite oznake za predstavljanje pokazivača, ali je sintaksa naredbi za njihovo definisanje slična.Primer definicije pokazivača u Pascal-u:
type T = record ... ;Pokazivac = ^T;
var P : Pokazivac;ilitype T = record ... ;var P : ^T;
6
Nizovi u statičkoj zoni memorijeNizovi u statičkoj zoni memorije
Ukoliko se niz pamti u statičkoj zoni memorije, njegova veličina treba da bude poznata u fazi kompajliranja. Zato je na programeru da proceni maksimalnu veličinu tog niza.
Primer definicije niza u statičkoj zoni memorije u programskom jeziku C:
int niz[1000];
7
Nizovi u Nizovi u dinamidinamiččkojkoj zoni memorije zoni memorije
Iako su nizovi statičke strukture podataka (u smislu da im se veličina ne menja u toku izvršenja programa), ceo niz se može smestiti u dinamičkoj zoni memorije pa u tom slučaju njegova veličina ne mora biti poznata u trenutku kompajliranja programa.
Primer definicije niza u dinamičkoj zoni memorije u programskom jeziku C:
int *niz, velicina; scanf(“%d”, &velicina); niz = (int*) malloc( velicina * sizeof(int) );
8
Nizovi u JaviNizovi u Javi
Java ne dozvoljava da nizovi budu sešteni u statičkoj zoni memorije – nizovi spadaju u referentne tipove podataka.
Primer definicije niza u programskom jeziku Java: int [] niz;
int velicina;
…
niz = new int [velicina];
9
DinamiDinamiččkeke kolekcije podataka kolekcije podataka
Pravi smisao dinamičke strukture podataka ne znači samo da se broj elemenata u kolekciji ne zna u toku kompajliranja programa, već da se broj elemenata u kolekciji stalno menja u toku samog izvršenja programa.
Primeri dinamičkih struktura podataka: Lančane liste, Stabla ...
10
Lančane listeLančane liste U lančanoj listi svaki element liste ima dva
dela: Informacioni deo i Pokazivač na sledeći element liste. Postoji glavni pokazivač liste koji ukazuje na
prvi element u njoj Struktura lančane liste:
nilGlava
11
StablaStabla U stablu listi svaki čvor sadrži:
Informacioni deo i Niz pokazivača na čvorove potomke Prvi element stabla se naziva koren stabla. Posebal slučaj stavla je binarno stoablo kod
koga svaki čvor može da ima najviše dva potomk: levi i desni
12
Binarna stablaBinarna stabla
Root
nil
nil
nil
13
Operacije nad dinamičkim Operacije nad dinamičkim strukturama podatakastrukturama podataka
Dodavanje elementa u kolekciju Brisanje elementa iz kolekcije Traženje u kolekciji Obilazak kolekcije
14
Dodavanje na početak lančane listeDodavanje na početak lančane liste
15
Operacije nad magacinomOperacije nad magacinom
16
RedRed
InfoLink
InfoLink
InfoLink
NIL
L
R
..
17
Operacije nad redomOperacije nad redom
Dodavanje slogova sa desne strane
Izbacivanje slogova vrši se sa leve strane
18
Operacije nad redomOperacije nad redom
Pretraživanje u redu
Dodavanje novog sloga iza pronađenog sloga
19
Ciklički redCiklički red
InfoLink
InfoLink
InfoLink. .
.
L R
20
Dvostruko spregnuti redDvostruko spregnuti red
21
Dvostruko spregnuti redDvostruko spregnuti red
InfoDLinkLLink
InfoDLinkLLink
InfoDLinkLLink
NIL
. .
.
Levo Desno
22
Izbacivanje slogaIzbacivanje sloga
InfoDLinkLLink
InfoDLinkLLink
InfoDLinkLLink
NIL
Levo DesnoPoint
23
Dodavanje novog slogaDodavanje novog sloga
InfoDLinkLLink
InfoDLinkLLink
InfoDLinkLLink
NIL
Levo Desno
InfoDLinkLLink
24
Dodavanje slogaDodavanje sloga
25
Međusobno zavisni tipovi podatakaMeđusobno zavisni tipovi podataka
26
Međusobno zavisni tipovi podatakaMeđusobno zavisni tipovi podataka
DANRODIME
STAROSTVOZILO
POLSUPRUG
DANRODIME
STAROSTVOZILO
POLSUPRUGA
BROJ VLASNIK
27
Višestruko povezane strukture Višestruko povezane strukture podatakapodataka
28
Višestruko povezane strukture Višestruko povezane strukture podatakapodataka
29
Višestruko povezane strukture Višestruko povezane strukture podatakapodataka
30
Višestruko povezane strukture Višestruko povezane strukture podatakapodataka
GODIME
POLOSOBEPRVO_DETESUPRUZNIK
GODIME
POLOSOBEPRVO_DETESUPRUZNIK
GODIME
POL_DETETAOTAC_DETETAMAJKA_DETETA
SLEDECE_DETE
31
PokaPokazzivaivači u C-uči u C-u
typedef opis_tipa *P_tip
main () {typedef double *P_double;double a, b;P_double pa = &a, pa = &b, pc;scanf(“%1f%1f”, pa, pb);pc = (*pa < *pb) ? pa : pb;printf(“%g”, *pc);}
32
PokaPokazzivaivači u C-uči u C-uNiNizzovi preko pokazivaovi preko pokazivaččaa
int a[10], *pa, *pb, x, y; /* niz, pokazivaci, podaci; */pa = & a[4]; /* pa pokazuje na a[4]; */x = *(pa +3) /* x = a[7]; */y = *pa + 3 /* y = a[4] + 3; */*pa++; /* povecava se vrednost pokazivaca*/(*pa) ++; /* povecava se pokazivani podatak*/pb = &a[2]; /* pb pokazuje na a[2]; */if (pa < pb) … /* poredjenje pokazivaca; */
int i,n;double a[100], b[100], *pa, *pb, s=0;for (pa = a, pb = b; pa<a+n; s+=*pa++ * *pb++);
Skalarni proizvod nizova a i b
33
DinamiDinamiččka dodela memorijeka dodela memorijeint *p = malloc (n * sizeof (int));double *a = malloc (n * m * sizeof (double));/* Dinamicka matrica preko niza pokazivaca*/int *a[20] /* niz pokazivaca na int*//* stavranje matrice */for (i=0; i<n; i++) {a[i]=malloc (n* sizeof(int));for (j=0; j<n; j++) { *a[i]+j=100*i+j;}/* Oslobadjanje memorije*/for (i=0; i<n; i++) { free(a[i]);}
34
PokaPokazzivaivači u C-uči u C-u
Opis sloga za binarno stablostruct tnode {char *word;int count;struct tnode *left;struct tnode *right;}