Programski jezici Dinamike strukture podataka Dinamike strukture podataka

  • Slides: 21
Download presentation
Programski jezici Dinamičke strukture podataka

Programski jezici Dinamičke strukture podataka

Dinamičke strukture podataka Statičke i dinamičke strukture podataka n Pokazivači n Korišćenje pokazivača n

Dinamičke strukture podataka Statičke i dinamičke strukture podataka n Pokazivači n Korišćenje pokazivača n Pokazivači u C-u n Lančane liste u C-u n

Statičke i dinamičke strukture podataka Statičke strukture - zauzimanje memorijskog prostora vrši se u

Statičke i dinamičke strukture podataka Statičke strukture - zauzimanje memorijskog prostora vrši se u fazi kompajliranja programa. Jednostavnije su za primenu i brže. n 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. n

Dinamičke strukture Osnovna dinamička struktura – lista n Lista je osnova za definisanje linearnih

Dinamičke strukture Osnovna dinamička struktura – lista n Lista je osnova za definisanje linearnih struktura podataka tipa magacina, redova, različitih tablica sa unapred nepoznatim brojem elemenata, kao i nelinearnih struktura kao što su stabla, grafovi i mreže n Primer primene dinamičkih struktura – retka ili slabo popunjena matrica u kojoj veći broj elemenata ima vrednost nula n n Pamte se nenulti elementi i njihova lokacija u

Pokazivači Mogućnost definisanja tipova podataka koji se sastoje od neograničenog skupa pokazivača na vrednosti

Pokazivači Mogućnost definisanja tipova podataka koji se sastoje od neograničenog skupa pokazivača na vrednosti određenog tipa podataka n Tip pokazivača se obično povezuje sa nekim tipom podatka, najčešće sa strukturnim tipom kojim se definišu slogovi koji se povezuju u dinamičku strukturu podataka n U slogovima se obično nalazi jedan ili više pokazivača istog tipa preko kojih se n

Pokazivači n n n Nad pokazivačima su definisane jedino operacije poređenja u smislu jednakosti

Pokazivači n n n Nad pokazivačima su definisane jedino operacije poređenja u smislu jednakosti i nejednakosti Svakom tipu pokazivača pripada i vrednost NIL (prazan pokazivač) koja ne pokazuje ni na jedan element strukture U programskim jezicima se koriste različite oznake za predstavljanje pokazivača, ali je sintaksa naredbi za njihovo definisanje slična n n type Pokazivac = ^T; T = record. . . ; var P : Pokazivac;

Korišćenje pokazivača n Pokazivači se obično koriste za definisanje struktura podataka tipa listi Magacin

Korišćenje pokazivača n Pokazivači se obično koriste za definisanje struktura podataka tipa listi Magacin n Red n Ciklički red n

Magacin

Magacin

Operacije nad magacinom Moguće su samo na vrhu magacina n Dodavanje novog sloga u

Operacije nad magacinom Moguće su samo na vrhu magacina n Dodavanje novog sloga u magacin n Brisanje sloga iz magacina n

Red L Info Link R . . . Info Link NIL

Red L Info Link R . . . Info Link NIL

Operacije nad redom Dodavanje slogova (vrši se sa desne strane) n Izbacivanje slogova (vrši

Operacije nad redom Dodavanje slogova (vrši se sa desne strane) n Izbacivanje slogova (vrši se sa leve strane) n

Ciklički red R L Info Link . . . Info Link

Ciklički red R L Info Link . . . Info Link

Pokazivači u C-u int a[10], *pa, *pb, x, y; /* niz, pokazivači, podaci; */

Pokazivači u C-u int a[10], *pa, *pb, x, y; /* niz, pokazivači, podaci; */ pa = & a[4]; /* pa pokazuje na a[4]; */ x = *(pa +3) /* x = a[7]; */ y = *pa + 3 /* y = a[4] + 3; */ *pa++; /* povećava se vrednost pokazivača*/ (*pa) ++; /* povećava se pokazivani podatak*/ pb = &a[2]; /* pb pokazuje na a[2]; */ if (pa < pb) … /* poređenje pokazivača; */

Lančane liste u C-u n n n Omogućavaju pamćenje većeg broja podataka istog tipa

Lančane liste u C-u n n n Omogućavaju pamćenje većeg broja podataka istog tipa u operativnoj memoriji. Za svaki element ponaosob rezerviše se prostor za njegovo smeštanje onog trenutka kada se pojavi potreba za tim elementom. U trenutku kada element više nije potreban, on se nezavisno od ostalih elemenata briše iz operativne memorije. Da bi se ova logika podržala, svaki element u lančanoj listi sadrži i pokazivač na sledeći element liste. Da bi se pristupilo elementima ovakve strukture, potrebno je znati adresu prvog elementa u listi. Pokazivač koji ukazuje na prvi element liste naziva se glavnim pokazivačem liste, odnosno glavom.

Lančane liste u C-u n stuktura lančane liste

Lančane liste u C-u n stuktura lančane liste

Lančane liste u C-u n Za predstavljanje elemenata liste koristi se sledeći tip podataka:

Lančane liste u C-u n Za predstavljanje elemenata liste koristi se sledeći tip podataka: typedef struct element { int info; struct element* next; } cvor;

Lančane liste u C-u n Glavni pokazivač liste je pokazivač na prvi element u

Lančane liste u C-u n Glavni pokazivač liste je pokazivač na prvi element u listi. On mora biti definisan kao pokazivač na navedenu strukturu: void main() { cvor *glava=NULL; : } n U radu sa lančanom listom, najbitiniji postupci su: dodavanje novog elementa listi, izbacivanje elementa iz liste i obilazak liste – tj. pristup svakom elementu liste radi

n dodavanje novog elementa listi koja predstavlja niz celih brojeva uređen u neopadajućem redosledu

n dodavanje novog elementa listi koja predstavlja niz celih brojeva uređen u neopadajućem redosledu cvor *dodaj(cvor *glava, int broj) { cvor *tekuci, *prethodni, *novi; tekuci = glava; prethodni = NULL; while( tekuci != NULL && tekuci->info < broj ) { prethodni = tekuci; tekuci = tekuci->next; } novi=(cvor*)malloc(sizeof(cvor)); novi->info=broj; novi->next=tekuci; if ( prethodni == NULL ) glava=novi; else prethodni->next=novi; return glava; }

n Brisanje zadatog elementa iz liste koja predstavlja niz celih brojeva uređen u neopadajućem

n Brisanje zadatog elementa iz liste koja predstavlja niz celih brojeva uređen u neopadajućem redosledu cvor *brisi(cvor *glava, int broj) { cvor *tekuci, *prethodni; tekuci = glava; prethodni = NULL; while( tekuci != NULL && tekuci->info < broj ) { prethodni = tekuci; tekuci = tekuci->next; } if ( tekuci != NULL && broj==tekuci->info ) { if ( prethodni == NULL ) glava=glava->next; else prethodni->next = tekuci->next; free(tekuci); } else printf( "broj %d ne postoji u listin", broj ); return glava; }

n Štampanje elementa liste void stampaj(cvor* glava) { cvor *tekuci = glava; while (

n Štampanje elementa liste void stampaj(cvor* glava) { cvor *tekuci = glava; while ( tekuci != NULL ) { printf("%d, ", tekuci->info ); tekuci = tekuci->next; } printf("n"); }

Pitanja ? ? ?

Pitanja ? ? ?