Programski jezici Dinamike strukture podataka Dinamike strukture podataka
- Slides: 21
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 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 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 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 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 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 n Red n Ciklički red n
Magacin
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
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
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 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 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 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 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 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 ( tekuci != NULL ) { printf("%d, ", tekuci->info ); tekuci = tekuci->next; } printf("n"); }
Pitanja ? ? ?
- Programski jezici i strukture podataka
- Proceduralni programski jezici
- Programski jezici
- Sta je programski jezik
- Objektno orijentisano programiranje
- Tehnicki fakultet mihajlo pupin zrenjanin
- Visi programski jezici
- Programski jezici za djecu
- Osnovni zadatak dinamike
- Relacioni operatori
- Dijkstrin algoritam primjer
- Slovenska grupa jezika
- Violeta moretti
- Skriptni jezici
- Java skript
- Asemblerski jezik
- Europski jezici
- Skriptni jezici i web programiranje
- Cv jezici
- Razrjeđenje koštane strukture
- Funkcionalna organizaciona struktura
- Induktivni efekt