algoritmi i strukture podataka n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Algoritmi i strukture podataka PowerPoint Presentation
Download Presentation
Algoritmi i strukture podataka

Loading in 2 Seconds...

play fullscreen
1 / 22

Algoritmi i strukture podataka - PowerPoint PPT Presentation


  • 180 Views
  • Uploaded on

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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Algoritmi i strukture podataka' - naava


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
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.

Zaštićeno licencom http://creativecommons.org/licenses/by-nc-sa/2.5/hr/

creative commons
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/.

povezane liste

Povezane liste

Jednostruko povezane liste

Dvostruko povezane liste

op enita linearna jednostruko povezana lista
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
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.

dvostruki pokaziva i i adrese
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

tra enje dodavanje i brisanje elemenata
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
pretra ivanje liste
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

dodavanje na po etak liste
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

dodavanje unutar liste
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

brisanje elementa s po etka liste
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

brisanje elementa iz sredine liste
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

liste s vi e klju eva i
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.

liste s vi e klju eva ii
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

dvostruko povezana lista
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

zadaci za vje bu
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);

zadaci za vje bu1
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);

zadaci za vje bu2
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.
zadaci za vje bu3
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.

zadaci za vje bu4
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.
zadaci za vje bu5
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);

zadaci za vje bu6
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.