34
1 DINAMIČKI TIPOVI PODATAKA

PJ8-DinamickiTipovi

Embed Size (px)

Citation preview

Page 1: PJ8-DinamickiTipovi

1

DINAMIČKI TIPOVI PODATAKA

Page 2: PJ8-DinamickiTipovi

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.

Page 3: PJ8-DinamickiTipovi

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.

Page 4: PJ8-DinamickiTipovi

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:

+, -, +=, -=, ++, --

Page 5: PJ8-DinamickiTipovi

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;

Page 6: PJ8-DinamickiTipovi

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];

Page 7: PJ8-DinamickiTipovi

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) );

Page 8: PJ8-DinamickiTipovi

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];

Page 9: PJ8-DinamickiTipovi

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 ...

Page 10: PJ8-DinamickiTipovi

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

Page 11: PJ8-DinamickiTipovi

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

Page 12: PJ8-DinamickiTipovi

12

Binarna stablaBinarna stabla

Root

nil

nil

nil

Page 13: PJ8-DinamickiTipovi

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

Page 14: PJ8-DinamickiTipovi

14

Dodavanje na početak lančane listeDodavanje na početak lančane liste

Page 15: PJ8-DinamickiTipovi

15

Operacije nad magacinomOperacije nad magacinom

Page 16: PJ8-DinamickiTipovi

16

RedRed

InfoLink

InfoLink

InfoLink

NIL

L

R

..

Page 17: PJ8-DinamickiTipovi

17

Operacije nad redomOperacije nad redom

Dodavanje slogova sa desne strane

Izbacivanje slogova vrši se sa leve strane

Page 18: PJ8-DinamickiTipovi

18

Operacije nad redomOperacije nad redom

Pretraživanje u redu

Dodavanje novog sloga iza pronađenog sloga

Page 19: PJ8-DinamickiTipovi

19

Ciklički redCiklički red

InfoLink

InfoLink

InfoLink. .

.

L R

Page 20: PJ8-DinamickiTipovi

20

Dvostruko spregnuti redDvostruko spregnuti red

Page 21: PJ8-DinamickiTipovi

21

Dvostruko spregnuti redDvostruko spregnuti red

InfoDLinkLLink

InfoDLinkLLink

InfoDLinkLLink

NIL

. .

.

Levo Desno

Page 22: PJ8-DinamickiTipovi

22

Izbacivanje slogaIzbacivanje sloga

InfoDLinkLLink

InfoDLinkLLink

InfoDLinkLLink

NIL

Levo DesnoPoint

Page 23: PJ8-DinamickiTipovi

23

Dodavanje novog slogaDodavanje novog sloga

InfoDLinkLLink

InfoDLinkLLink

InfoDLinkLLink

NIL

Levo Desno

InfoDLinkLLink

Page 24: PJ8-DinamickiTipovi

24

Dodavanje slogaDodavanje sloga

Page 25: PJ8-DinamickiTipovi

25

Međusobno zavisni tipovi podatakaMeđusobno zavisni tipovi podataka

Page 26: PJ8-DinamickiTipovi

26

Međusobno zavisni tipovi podatakaMeđusobno zavisni tipovi podataka

DANRODIME

STAROSTVOZILO

POLSUPRUG

DANRODIME

STAROSTVOZILO

POLSUPRUGA

BROJ VLASNIK

Page 27: PJ8-DinamickiTipovi

27

Višestruko povezane strukture Višestruko povezane strukture podatakapodataka

Page 28: PJ8-DinamickiTipovi

28

Višestruko povezane strukture Višestruko povezane strukture podatakapodataka

Page 29: PJ8-DinamickiTipovi

29

Višestruko povezane strukture Višestruko povezane strukture podatakapodataka

Page 30: PJ8-DinamickiTipovi

30

Višestruko povezane strukture Višestruko povezane strukture podatakapodataka

GODIME

POLOSOBEPRVO_DETESUPRUZNIK

GODIME

POLOSOBEPRVO_DETESUPRUZNIK

GODIME

POL_DETETAOTAC_DETETAMAJKA_DETETA

SLEDECE_DETE

Page 31: PJ8-DinamickiTipovi

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);}

Page 32: PJ8-DinamickiTipovi

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

Page 33: PJ8-DinamickiTipovi

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]);}

Page 34: PJ8-DinamickiTipovi

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;}