200 likes | 301 Views
Algoritmi i strukture podataka. Prof. dr. sc. Damir Kalpić Prof. dr. sc. Vedran Mornar Prof. dr. sc. Krešimir Fertalj Doc. dr. sc. Gordan Gledec Dr. sc. Zvonimir Vanjak Dr. sc. Ivica Botički, dipl. ing. Mr. sc. Boris Milašinović.
E N D
Algoritmi i strukture podataka Prof. dr. sc. Damir Kalpić Prof. dr. sc. Vedran Mornar Prof. dr. sc. Krešimir Fertalj Doc. dr. sc. Gordan Gledec Dr. sc. Zvonimir Vanjak Dr. sc. Ivica Botički, dipl. ing. Mr. sc. Boris Milašinović Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/
Creative Commons • slobodno smijete: • dijeliti — umnožavati, distribuirati i javnosti priopćavati djelo • remiksirati — prerađivati djelo • pod sljedećim uvjetima: • imenovanje. Morate priznati i označiti autorstvo djela na način kako je specificirao autor ili davatelj licence (ali ne način koji bi sugerirao da Vi ili Vaše korištenje njegova djela imate njegovu izravnu podršku). • nekomercijalno. Ovo djelo ne smijete koristiti u komercijalne svrhe. • dijeli pod istim uvjetima. Ako ovo djelo izmijenite, preoblikujete ili stvarate koristeći ga, preradu možete distribuirati samo pod licencom koja je ista ili slična ovoj. U slučaju daljnjeg korištenja ili distribuiranja morate drugima jasno dati do znanja licencne uvjete ovog djela. Najbolji način da to učinite je linkom na ovu internetsku stranicu. Od svakog od gornjih uvjeta moguće je odstupiti, ako dobijete dopuštenje nositelja autorskog prava. Ništa u ovoj licenci ne narušava ili ograničava autorova moralna prava. Tekst licencije preuzet je s http://creativecommons.org/. Algoritmi i strukture podataka, FER, 2008./09.
Stog Algoritmi i strukture podataka, FER, 2008./09. struktura podataka kod koje se posljednji pohranjeni podatak prvi uzima u obradu potrebne operacije: • dodavanje (push) elemenata na vrh stoga (top) • brisanje (pop) elemenata s vrha stoga • inicijalizacija praznog stoga pojedina operacija dodaj ili brisizahtijeva jednako vremena bez obzira na broj pohranjenih podataka situacija da je stog pun može zahtijevati alociranje dodatne memorije i ponovno izvođenje programa • prazan stog ne mora značiti pogrešku
Stog implementiran statičkim poljem MAXSTOG=5 4 #define MAXSTOG 5 typedef struct { int vrh, polje[MAXSTOG]; } Stog; void init_stog(Stog *stog){ stog->vrh = -1; } 3 2 1 0 stog->vrh -1 StogPoljem Algoritmi i strukture podataka, FER, 2008./09. može se realizirati statičkom strukturom podataka • u jednodimenzionalno polje zadane strukture dodaju se ili brišu pojedine stavke prema načelu Last In First Out (LIFO) • ažurira se vrijednost varijable koja predstavlja vrh stoga inicijalizacija praznog stoga: • postavljanje vrha na početnu vrijednost
Dodavanje elementa na stog int dodaj (int element, Stog *stog) { if (stog->vrh >= MAXSTOG-1) return 0; stog->vrh++; stog->polje[stog->vrh] = element; return 1; } 1 -4 7 4 2 Pozivni program: 3 Stog stog; init_stog(&stog); dodaj(5, &stog); dodaj(2, &stog); dodaj(7, &stog); dodaj(-4, &stog); dodaj(1, &stog); dodaj(9, &stog); 5 2 -1 1 0 O(1) Odredite složenost! stog->vrh Algoritmi i strukture podataka, FER, 2008./09.
Skidanje elemenata sa stoga int skini (int *element, Stog *stog) { if (stog->vrh < 0) return 0; *element = stog->polje[stog->vrh]; stog->vrh--; return 1; } 1 -4 7 4 2 3 Pozivni program: 5 skini(&element, &stog); skini(&element, &stog); skini(&element, &stog); skini(&element, &stog); skini(&element, &stog); skini(&element, &stog); 2 -1 1 0 O(1) Odredite složenost! stog->vrh Algoritmi i strukture podataka, FER, 2008./09.
Zadaci za vježbu Algoritmi i strukture podataka, FER, 2008./09. Napisati funkciju za skidanje elementa sa stoga realiziranog statičkim poljem. Podatak koji se pohranjuje realni je broj. Ako operacija nije uspjela, funkcija vraća 0, inače 1. Napisati funkciju za dodavanje elementa u stog realiziran statičkim poljem u koje stane najviše MAXZzapisa. Zapis koji se pohranjuje na stog jedan je cijeli broj i polje od 10 realnih brojeva. Ako je dodavanje uspjelo, funkcija vraća vrijednost 1, a ako zbog bilo kojeg razloga dodavanje nije uspjelo, funkcija vraća 0. Prototip funkcije: int stavi (struct cvor element, Stog *stog);
Zadaci za vježbu Algoritmi i strukture podataka, FER, 2008./09. Na magnetskom disku postoji neformatizirana datoteka stog.dat koja je organizirana kao stog. Na početku datoteke upisan je maksimalni dopušteni kapacitet stoga izražen u broju zapisa (int) i adresa zadnje upisanog elementa na stogu (long). Element stoga je zapis o položenom ispitu studenta: • matični broj (long) • ime i prezime (24+1 znak) • sifra predmeta (int) • ocjena (short) Definirajte tip podatka Stog i napišite potrebne funkcije za rada sa stogom. Kao glavni program iskoristite glavni program iz StogPoljem.c
Liste 1.11.2014.
Osnovni pojmovi linearna listaA=(a1,a2,...an) struktura je podataka koja se sastoji od uređenog niza elemenata odabranih iz nekog skupa podataka za linearnu listu kažemo da je prazna ako ima n=0 elemenata elementi listeainazivaju se još i atomi može se realizirati statičkom strukturom podataka - poljem Algoritmi i strukture podataka, FER, 2008./09.
Realizacija liste atom atom struct at { int element; struct at *sljed; }; typedef struct at atom; element sljed Algoritmi i strukture podataka, FER, 2008./09. • dinamička podatkovna struktura za realizaciju liste sastoji se od pokazivača na prvi element liste i od proizvoljnog broja atoma • svaki se atom sastoji od podatkovnog dijela i pokazivača na sljedeći element liste • memorija za svaki atom liste zauzme se u trenutku kad je potrebna za pohranu podataka, a oslobađa kad se podatak briše • granulacija je veličine atoma
Prazna i neprazna lista glava Prazna lista Neprazna lista glava 52 42 Algoritmi i strukture podataka, FER, 2008./09.
Prikaz stoga pomoću liste • stog, ranije realiziran statičkom strukturom polje, može se realizirati i linearnom listom • umetanje i brisanje iz liste radi se na jednom kraju liste • glava liste predstavlja vrh stoga struct at { tip element; struct at *sljed; }; typedef struct at atom; typedef struct{ atom *vrh; } Stog; void init_stog(Stog *stog){ stog->vrh = NULL; } stog->vrh • StogListom Algoritmi i strukture podataka, FER, 2008./09.
Dodavanje elementa na stog realiziran listom int dodaj (tip element, Stog *stog) { atom *novi; if ((novi = (atom*) malloc(sizeof(atom))) != NULL) { novi->element = element; novi->sljed = stog->vrh; stog->vrh = novi; return 1; } else return 0; } Pozivni program: novi stog->vrh Stog stog; init_stog(&stog); dodaj (5, &stog); 5 Algoritmi i strukture podataka, FER, 2008./09.
Dodavanje novog elementa na stog realiziran listom int dodaj (tip element, Stog *stog) { atom *novi; if ((novi = (atom*) malloc(sizeof(atom))) != NULL) { novi->element = element; novi->sljed = stog->vrh; stog->vrh = novi; return 1; } else return 0; } Pozivni program: novi stog->vrh 3 Stog stog; init_stog(&stog); dodaj (5, &stog); dodaj (3, &stog); 5 Složenost? O(1) Algoritmi i strukture podataka, FER, 2008./09.
Skidanje elementa sa stoga realiziranog listom - I int skini (tip *element, Stog *stog) { atom *pom; if (stog->vrh == NULL) return 0; *element = stog->vrh->element; pom = stog->vrh->sljed; /* adresa novog vrha */ free(stog->vrh); /* obriši stari vrh */ stog->vrh = pom; /* postavi novi vrh */ return 1; } Pozivni program: pom skini (&element, &stog); stog->vrh 3 5 Algoritmi i strukture podataka, FER, 2008./09.
Skidanje elementa sa stoga realiziranog listom - II int skini (tip *element, Stog *stog) { atom *pom; if (stog->vrh == NULL) return 0; *element = stog->vrh->element; pom = stog->vrh->sljed; /* adresa novog vrha */ free(stog->vrh); /* obriši stari vrh */ stog->vrh = pom; /* postavi novi vrh */ return 1; } Pozivni program: pom skini (&element, &stog); skini (&element, &stog); stog->vrh 5 Algoritmi i strukture podataka, FER, 2008./09.
Skidanje elementa s praznog stoga realiziranog listom int skini (tip *element, Stog *stog) { atom *pom; if (stog->vrh == NULL) return 0; *element = stog->vrh->element; pom = stog->vrh->sljed; /* adresa novog vrha */ free(stog->vrh); /* obriši stari vrh */ stog->vrh = pom; /* postavi novi vrh */ return 1; } Pozivni program: pom skini (&element, &stog); skini (&element, &stog); skini (&element, &stog); stog->vrh O(1) Složenost? Algoritmi i strukture podataka, FER, 2008./09.
Korištenje memorijskog prostora Algoritmi i strukture podataka, FER, 2008./09. prikaz stoga pomoću liste zahtijeva više memorije po podatku (jer postoji i pokazivač) • daje veću fleksibilnost više stogova može paralelno koristiti isti memorijski prostor korištenje memorije je proporcionalno broju podataka na stogu, a nije određeno maksimalnim kapacitetima stogova s druge strane, kapacitet pojedinog stoga ograničen je samo raspoloživom memorijom