1 / 22

Algoritmi i strukture podataka

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 Mr. sc. Boris Milašinović Ivica Botički, dipl. ing.

naava
Download Presentation

Algoritmi i strukture podataka

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 Mr. sc. Boris Milašinović Ivica Botički, dipl. ing. Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/

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

  3. Povezane liste Jednostruko povezane liste Dvostruko povezane liste

  4. Općenita linearna jednostruko povezana lista podatak je moguće u listu umetnuti: na početak liste (isto kao na stog) iza nekog elementa na listi glava 45 63 15

  5. Primjer •  Lista Napisati program koji će pročitati niz cijelih brojeva i od njih oblikovati linearnu jednostruko povezanu listu tako da podaci budu u rastućem nizu. Ispisati redom sadržaj liste. Učitavati podatke koje se želi brisati iz liste. Program se završava kad se upiše podatak koji ne postoji u listi.

  6. Dvostruki pokazivači i adrese **glavap=*glava=atom *glavap=glava=&atom 63 15 glavap &glava *glavap **glavap glava glavap=&glava=&(&atom) glavapsadrži adresu pokazivača na prvi član liste, tj. &(atom*) ili &(&(atom)) *glavap sadrži pokazivač na prvi član liste, tj (atom*) ili (&atom) **glavap je prvi član liste, tj. atom glava je glava liste u pozivnom programu

  7. Traženje, dodavanje i brisanje elemenata pretraživanje liste – od glave dok se ne pronađe traženi element element možemo dodati: • na početak liste (tad mijenjamo glavu) • negdje iza postojećeg elementa liste • na posljednje mjesto • ispred elementa koji je veći od onog koji umećemo element koji brišemo može biti: • na početku liste (tad pomičemo glavu na sljedeći element) • negdje iza postojećeg elementa liste • treba pronaći element koji prethodi onom koji brišemo i povezati ga s elementom koji se nalazi iza onog kojeg brišemo • obavezno obrisati memoriju koju je zauzimao brisani element

  8. Pretraživanje liste Zašto se ne koristi dvostruki pokazivač? // trazenje elementa liste // vraca pokazivac na trazeni element ili NULL ako ga ne nadje atom *trazi (atom *glava, int element) { atom *p; for (p = glava; p != NULL; p = p->sljed) { if (p ->element == element) return p; } return NULL; } element 64 p glava &glava 45 64 95 15

  9. Dodavanje na početak liste int dodaj (atom **glavap, int element) { atom *novi; if ((novi = (atom *) malloc(sizeof(atom))) == NULL) return 0; novi->element = element; if (*glavap == NULL || (*glavap)->element >= element) { // Dodavanje na pocetak liste novi->sljed = *glavap; *glavap = novi; }.... element 15 *glavap 45 64 95 glava 15 &glava glavap

  10. Dodavanje unutar liste int dodaj (atom **glavap, int element) { atom *novi, *p; if ((novi = (atom *) malloc(sizeof(atom))) == NULL) return 0; novi->element = element; // ako element dodajemo unutar liste for (p = *glavap; p->sljed &&(p->sljed)->element < element; p = p->sljed); novi->sljed = p->sljed; p->sljed = novi; ... element 71 p *glavap 45 64 95 glava 71 &glava glavap

  11. Brisanje elementa s početka liste int brisi (atom **glavap, int elem) { atom *p; for (; *glavap && (*glavap)->elem != elem; glavap = &((*glavap)->sljed)); if (*glavap) { p = *glavap; *glavap = (*glavap)->sljed; free (p); return 1; } else return 0; } elem 45 p *glavap 45 64 95 glava 71 &glava glavap

  12. Brisanje elementa iz sredine liste Zašto smijemo mijenjativrijednost glavap? int brisi (atom **glavap, int elem) { atom *p; for (; *glavap && (*glavap)->elem != elem; glavap = &((*glavap)->sljed)); if (*glavap) { p = *glavap; *glavap = (*glavap)->sljed; free (p); return 1; } else return 0; } elem 71 Što pohranjujemo uglavap? p *glavap 45 64 71 95 glava &glava *glavap *glavap glavap

  13. Liste s više ključeva - I glavaMBR glavaPrez 53533 21373 33433 Ferić Berić Perić Pročitati matične brojeve (cijeli broj) i prezimena studenata (14+1 znakova). Oblikovati listu po rastućem matičnom broju i listu po abecedi. Podaci su upisani samo jednom! Za zadani matični broj pronaći pripadno prezime.

  14. Liste s više ključeva - II • VisestrukaLista kod oblikovanja liste koristit će se adrese pokazivača (adresa adrese atoma) za modificiranje pokazivača na sljedeći atom: • (*glavap)->smbrje pokazivač smbr u atomu na koji pokazuje *glavap • &((*glavap)->smbr)je adresa tog pokazivača alternativno rješenje s varijablom pom (pom je isto što i glavap) • pom sadrži adresu pokazivača na član liste (atom) s kojim se uspoređuje novi element • *pomje pokazivač na prethodni atom • (*pom)->smbrje pokazivač na trenutni atom kad se ustanovi da treba ubaciti novi, prekida se pretraga po listi i izmijeni se pokazivač upisan u prethodnom atomu (ili glavi) tako da on sada pokazuje na novi atom

  15. Dvostruko povezana lista Radi bržeg traženja u oba smjera kretanja po listi, ona može biti dvostruko povezana. Svaki atom osim elementa s podacima, sadrži pokazivač na sljedeći atom i pokazivač na prethodni atom. Lista ima glavu i rep. Primjer: RedListom2 funkcije za dodavanje i skidanje rukuju pokazivačima na glavu (glavap) i rep (repp) rep glava *repp *glavap &rep &glava repp glavap

  16. Zadaci za vježbu U memoriji oblikovati jednostruko povezanu listu. Pojedini element sadrži matični broj (8 znamenki), ime i prezime (24+1 znak) i prolazne ocjene iz do 10 predmeta (cijeli brojevi). Listu oblikovati sortirano po matičnom broju studenta. Napisati funkciju koja će ispisivati matične brojeve, ime i prezime i prosjek ocjena studenata: Maticni broj Ime i prezime Prosjecna ocjena xxxxxxxx AAAAAAAAAAAAAAAAAAAAAAAA x.xx xxxxxxxx AAAAAAAAAAAAAAAAAAAAAAAA x.xx … Prototip funkcije je: void ispisi (atom *glava);

  17. Zadaci za vježbu U memoriji oblikovati linearnu listu. U pojedini atom liste upisati: • matični broj studenta (4 znamenke) • ime i prezime (30+1 znakova) • ocjenu (cijeli broj) • pokazivač na sljedeći atom Napisati funkciju koja će iz liste izbrisati sve zapise koji sadrže ocjenu 1. Prototip funkcije je: void brisi (atom **glava);

  18. Zadaci za vježbu Strukturu red realizirati kao memorijski rezidentnu listu. Jedan element sadrži šifru (cijeli broj) i naziv (15+1 znakova). Treba napisati funkciju koja dodaje i funkciju koja briše element iz reda. Ako je operacija uspjela, funkcija vraća vrijednost 1, a ako nije, vraća 0. • Napomena: Novi element dodaje se na kraj liste i pamti se pokazivač na zadnji element, a elementi se skidaju iz reda od glave liste.

  19. Zadaci za vježbu Napisati funkciju za oblikovanje memorijski rezidentne linearne jednostruko povezane liste u koju su upisani šifra artikla (cijeli broj) i naziv artikla (15+1 znakova). Lista je poredana po šifri artikala. Napisati funkciju za pronalaženje člana liste sa zadanom šifrom artikla. Ulazni argumenti su glava liste i šifra artikla, a izlazni argument je naziv artikla. Funkcija vraća rezultat 0 ako šifra nije nađena, a 1 ako jest.

  20. Zadaci za vježbu Napisati funkciju za oblikovanje uzlazno poredane liste. Listu pohraniti u neformatiranu datoteku lista. Napisati funkciju za logičko brisanje čvora sa zadanim ključem. Ulazni podatak je zadana vrijednost ključa. Ulazno-izlazni podatak je glava liste. Funkcija vraća vrijednost 1 ako je brisanje uspjelo, a vrijednost 0 ako čvor sa zadanim ključem nije bio pronađen. Pojedini atom sadrži: • kućni telefonski broj (4 znamenke) • prezime (15+1 slovo) • ime (15+1 slovo) • Kućni telefonski broj jest ključ. Zadnji član liste ima pokazivač s vrijednošću -1.

  21. Zadaci za vježbu Napisati funkciju za oblikovanjem jednostruko povezane silazno poredane liste. Lista je pohranjena u neformatiranom obliku u datoteci. Glava liste je zapisana na početku datoteke. Funkcija vraća vrijednost 1 ako je dodavanje uspjelo, a vrijednost 0 ako nije. Pojedini čvor sadrži šifru (4 znamenke) i naziv artikla (15+1 slovo). Šifra jest ključ. Prototip funkcije je: int dodaj (int sifra, char* naziv, const char *ime_dat);

  22. Zadaci za vježbu Zadan je niz ulaznih podataka tipa int: 11, 15, 12, 5, 4, 10 Treba napisati sadržaj datoteke u kojoj su ovi ulazni podaci pohranjeni kao jednostruko povezana lista sortirana rastućim redosljedom. Upisati adrese i vrijednosti pojedinih zapisa. Pretpostaviti da je glava liste upisana na početku datoteke. Napisati program za oblikovanje i brisanje dvostruko povezane liste, analogno onome za jednostruko povezanu listu.

More Related