1 / 22

Algoritmi i strukture podataka

Algoritmi i strukture podataka. Jednostruko i dvostruko povezane liste. 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. Primjer.

ursala
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 Jednostruko i dvostruko povezane liste

  2. 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 Algoritmi i strukture podataka

  3. Primjer • 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. •  Lista Algoritmi i strukture podataka

  4. Dvostruki pokazivači i adrese • 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 **glavap=*glava=atom *glavap=glava=&atom 63 15 glavap glava glavap=&glava=&(&atom) Algoritmi i strukture podataka

  5. 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 Algoritmi i strukture podataka

  6. 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 45 64 95 15 Algoritmi i strukture podataka

  7. 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 15 Algoritmi i strukture podataka

  8. 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 71 Algoritmi i strukture podataka

  9. 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 71 Algoritmi i strukture podataka

  10. 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 glavap *glavap *glavap Algoritmi i strukture podataka

  11. Liste s više ključeva - I • 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. glavaPrez 53533 21373 33433 glavaMBR Ferić Berić Perić Algoritmi i strukture podataka

  12. Liste s više ključeva - II • za razliku od prethodnog zadatka ovdje će se kod oblikovanja liste koristiti adrese pokazivača (adresa adrese atoma) za modificiranje pokazivača na slijedeći atom: • (*glavap)->smbr je 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 • *pom je pokazivač na prethodni atom • (*pom)->smbr je 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 •  VisestrukaLista Algoritmi i strukture podataka

  13. 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 Algoritmi i strukture podataka

  14. Objektno orijentirana realizacija jednostruke linearne liste Interni podaci o realizaciji liste struct podatak { int kljuc; int element; }; class Lista { private: struct atom { podatak stavka; atom *sljed; }; atom *glava; atom *rep; } Algoritmi i strukture podataka

  15. Članske funkcije klase Lista public: Lista (); void DodajNaPocetak (podatak stavka); void DodajNaKraj (podatak stavka); bool DodajSortirano (podatak stavka, bool uzlazno); bool NadjiPoKljucu (int kljuc, podatak & stavka); bool BrisiSPocetka (podatak& stavka); bool BrisiZadanog (int kljuc, podatak& stavka); void BrisiSve (); void IspisiListu (); ~Lista (); }; ListaOO Algoritmi i strukture podataka

  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); Algoritmi i strukture podataka

  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); Algoritmi i strukture podataka

  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. Algoritmi i strukture podataka

  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. Algoritmi i strukture podataka

  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. Algoritmi i strukture podataka

  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); Algoritmi i strukture podataka

  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. Algoritmi i strukture podataka

More Related