algoritmi sortiranja lista - nasport.pmf.ni.ac.rs

22
Elementarne strukture podataka Overviev Povezane liste Implementacija pokazivaˇ ca i objekata Predstavljanje korenskih stabala Algoritmi sortiranja Stek Lista Upoznajmo se, sada, sa reprezentacijom dinamiˇ ckih skupova jednostavnim strukturama koje koriste pokazivaˇ ce (pointere). Lista–apstrakcija linearnog uredjenja Najvažniji apstraktni tipovi podataka su oni kod kojih elementi domena imaju neku vrstu prirodnog uredjenja. Ovde ´ ce biti reˇ ci o apstraktnim tipovima podataka koji su zasnovani na linearnom uredjenju. Pojam linearnog uredjenja podrazumeva da je dat konaˇ can skup elemenata S = {a 1 , a 2 ,..., a n }, pri ˇ cemu se popsmatra konaˇ can, uredjen niz elemenata-lista L = {b 0 , b 1 ,..., b k }, dužine k N, pri ˇ cemu b i S, za i = 0, k i b 0 < b 1 < ··· < b k .

Upload: others

Post on 25-Dec-2021

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Stek

Lista

Upoznajmo se, sada, sa reprezentacijom dinamickih skupovajednostavnim strukturama koje koriste pokazivace (pointere).

Lista–apstrakcija linearnog uredjenja

Najvažniji apstraktni tipovi podataka su oni kod kojih elementidomena imaju neku vrstu prirodnog uredjenja. Ovde ce biti recio apstraktnim tipovima podataka koji su zasnovani nalinearnom uredjenju.

Pojam linearnog uredjenja podrazumeva da je dat konacanskup elemenata S = {a1, a2, . . . , an}, pri cemu se popsmatrakonacan, uredjen niz elemenata-lista L = {b0, b1, . . . , bk},dužine k ∈ N, pri cemu bi ∈ S, za i = 0, k i b0 < b1 < · · · < bk.

Page 2: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Stek

Lista(cont.)

Napomena

Uredjenje u listi L ne zavisi od uredjenja elemenata u skupu S.

Lista može da se definiše rekurentno na sledeci nacin:

Definicija

(i) Prazna lista je lista;(ii)Lista se sastoji od prvog elementa koji se naziva glava liste iliste preostalih elemenata koja se naziva rep;(iii) Svaka lista se dobija konacnom primenom pravila (i) i (ii).

Page 3: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Stek

Stek i kju (queue)

Stek i kju su dinamicki sistemi iz kojih se elementi pomerajuskupovnom operacijom brisanja DELETE.U steku je element koji se briše iz liste onaj koji je poslednji,najskorije upisan, što znaci da je stek implementacija LAST-IN,FRST-OUT ili LIFO.Iz queuea se uvek briše element koji je najduže u listi. To znacida je queue implementacija FIRST-IN, FRST-OUT ili FIFO.Postoji nekoliko efektivnih postupaka za implementaciju steka ikjua na racunaru.Pokazacemo kako se svaki od njih može implementiratiupotrebom obicnih nizova.

Page 4: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Stek

Stek

INSERT operacija kojom se neki element ubacuje u stek jePUSH,a DELETE operacija kojom se neki element briše izsteka je POP.Stek od najviše n elemenata možemo inplementirati nizomS[1..n]. Ovom nizu pridružujemo atribut top[S] koji oznacavaposlednji unet element. Stek sadrži elemente S[1..top[S]], gdeje S[1] element sa dna steka i S[top[S]] element sa vrha.Kada je top[S] = 0 stek je prazan.Ako brišemo elemente iz praznog steka, on ce bitiUNDERFLOWS (ispod toka) što znaci da se javlja greška.Ako top[S] prelazi n stek ce biti OVERFLOWS (iznad toka).Stek operacije PUSH, POP i Stack-Empty mogu seimplementirati u nekoliko linija koda.

Page 5: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Stek

Stek(cont.)

Page 6: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Stek

Stek(cont.)

POP(S)

IF Stack − Empty(S) THEN

ERROR ”UNDERFLOW”

ELSE top[S]← top[S]− 1

RETURN S[top[S] + 1]

END

Page 7: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Queue

Queue (Kju)

I na kjuu se definišu osnovne operacije ubacivanja i brisanjapodataka.

Operacije

INSERT operacija na kjuu je ENQUEUE, a DELETE operacijaDEQUEUE.

Kao i POP operacija na steku i DEQUEUE operacija nema nijedan argument. Kju ima glavu head i rep tail. Element sedopisuje operacijom ENQUEUE tako što zauzima svoje mestona repu. Element koji se briše je, uvek, element smešten namesto glave.Sledeca slika pokazuje nacin implementacije kjua korišcenjemniza Q[1..n].

Page 8: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Queue

Queue(cont.)

Page 9: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Queue

Queue(cont.)

head[Q]–indeksira, tj. pokazuje na glavu kjua;

tail[Q]–indeksira narednu lokaciju u koju bi bio upisannovopristižuci element. Dakle, u kjuu su elementi nalokacijama

head[Q], head[Q] + 1, . . . , tail[Q]− 1,

pri cemu se "krecemo u krug" u smislu da lokacija 1neposredno sledi lokaciju n u ciklicnom smislu.

Napomena

Kada je head[Q]=tail[Q]–kju je prazan. Za inicijalna stanjauzima se head[Q]=tail[Q]=1

Page 10: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Queue

Queue(cont.)

Kada je kji prazan, primena operacije DEQUEUE dajeUNDERFLOW. Kju je pun kada je head[Q]=tail[Q]+1 idopisivanje elementa ukazuje na OVERFLOW.

ENQUEUE(Q, x)

Q[tail[Q]]← x

IF tail[Q] = length[Q] THEN

tail[Q]← 1

ELSE tail[Q] = tail[Q] + 1

END

Page 11: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Queue

Queue(cont.)

DEQUEUE(Q)

x← Q[head[Q]]

IF head[Q] = length[Q] THEN

head[Q]← 1

ELSE head[Q] = head[Q] + 1

RETURN x

END

Page 12: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Pretraživanje povezanih listiUpis u povezanu listuBrisanje iz povezane listeSentinel

Povezane liste

Definicija

Povezane liste su strukture podataka ciji su objekti sortiraniprema linearnom uredjenju. Uredjenje u povezanim listamaodredjeno je pokazivacem na svaki objekat.

Liste mogu imati nekoliko formi. One mogu biti jednostruko ilidvostruko povezane, mogu biti sortirane ili ne, mogu biticirkularne ili ne.Ako je lista jednostruko povezana imamo samo jedan pointernext[x] koji pokazuje na sledbenika proizvoljno izabranogelementa x iz liste.

Page 13: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Pretraživanje povezanih listiUpis u povezanu listuBrisanje iz povezane listeSentinel

Povezane liste(cont.)

Ako je rec o sortiranoj listi, linearno uredjenje liste odgovaralinearnom uredjenju kljuceva koji ukazuju na pozicije u kojimasu smešteni elementi liste.U tom slucaju je minimalni element smešten na mestu glave, amaksimalni u repu liste.

Cirkularne listeCirkularne liste su dvostruko-povezane liste sa dva pokazivacaprev, koji pokazuje na element koji prethodi izabranomelementu, i next, koji pokazuje na sledbenika datog elementa.

Page 14: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Pretraživanje povezanih listiUpis u povezanu listuBrisanje iz povezane listeSentinel

Pretraživanje

Napomena

U cirkularnim listama prev pokazivac glave liste pokazuje narep i next pokazivac repa liste pokazuje na glavu liste. Zatocirkularnu listu možemo posmatrati kao presten elemenata.

Procedura pretraživanja povezane liste L, LIST-SEARCH(L,k),pronalazi prvi element na poziciji kljuca k u listi L, prostimlinearnim pretraživanjem dovodeci pokazivac do ovogelementa.

Page 15: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Pretraživanje povezanih listiUpis u povezanu listuBrisanje iz povezane listeSentinel

Pretraživanje

LIST−SEARCH(L, k)

x← head[L]

WHILE x 6= NIL and key[x] 6= k

DO x← next[x]

RETURN x

END

Page 16: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Pretraživanje povezanih listiUpis u povezanu listuBrisanje iz povezane listeSentinel

Upis

Dati element x ciji je kljuc vec postavljen upisacemo ispredpovezane liste narednom procedurom:

LIST−INSERT(L, X)

next[x]← head[L]

IF head[L] 6= NIL THEN

prev[head[L]]← x

head[L]← x

prev[x]← NIL

END

Page 17: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Pretraživanje povezanih listiUpis u povezanu listuBrisanje iz povezane listeSentinel

Brisanje

Naredna procedura "seli" element x iz povezane liste L.Ako jedat pointer na element x, apdejtovanjem pokazivaca x se"udaljava iz povezane liste". Ako je dat samo element x bezpokazivaca najpre moramo pozvati proceduru LIST-SEARCHda postavimo pointer na ovaj element.

LIST−DELETE(L, x)

IF prev[x] 6= NIL THEN

next[prev[x]] ← next[x]

ELSE head[L]← next[x]

IF next[x] 6= NIL THEN

prev[next[x]] ← prev[x]

END

Page 18: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Pretraživanje povezanih listiUpis u povezanu listuBrisanje iz povezane listeSentinel

Stražar (Sentinel)

Pseudokod za LIST-DELETE bio bi jednostavniji ako bismomogli da ignorišemo granicne uslove za glavu i rep liste.

LIST−DELETE1(L, X)

next[prev[x]] ← next[x]

prev[next[x]] ← prev[x]

END

Stražar je lažni objekat koji nam dozvoljava da pojednostavimogranicne uslove. Na primer, pretpostavimo da smo sa listom Lpredvideli objekat NIL[L] koji oznacava NIL, ali može da sadrži isva polja drugih elemenata liste. Kad god smo upuceni na NILu kodu liste, vršimo zamenu te karakteristike stražarom NIL[L].

Page 19: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Pretraživanje povezanih listiUpis u povezanu listuBrisanje iz povezane listeSentinel

Stražar (cont.)

Ubacimo stražara NIL[L] izmedju glave i repa, tj. nekanext[NIL[L]] pokazuje glavu, a prev[NIL[L]] rep. Takodje, nextpolje za rep i prev za glavu su prikazani sa NIL[L].

LIST−SEARCH1(L, k)

x← next[NIL[L]]

WHILE x 6= NIL[L] and key[x] 6= k

DO x← next[x]

RETURN x

END

Page 20: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Pretraživanje povezanih listiUpis u povezanu listuBrisanje iz povezane listeSentinel

Stražar(cont.)

LIST−INSERT1(L, x)

next[x]← next[NIL[L]]

prev[next[NIL[L]]]← x

next[NIL[L]]← x

prev[x]← NIL[L]

END

Page 21: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Objekti koji se predstavljaju jednim nizomNelocirani i slobodni objekti

Predstavljanje objekata

Videcemo kako se mogu implementirati povezane strukturepodataka, bez objašnjavanja kom tipu podataka pripadajupokazivaci. I objekte i pokazivace uzimacemo iz nizova.Kolekcije objekata koje imaju ista polja, mogu se predstavitikorišcenjem niza za svako polje.Za dati niz indekasa x, key[x], next[x], prev[x] ukazuju na mestoobjekata u povezanoj listi. U odnosu na ovakvu interpolaciju,pokazivac x je zajednicki indeks za key, next i prev indekse.

Page 22: Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs

Elementarne strukture podatakaOverviev

Povezane listeImplementacija pokaziva ca i objekata

Predstavljanje korenskih stabalaAlgoritmi sortiranja

Objekti koji se predstavljaju jednim nizomNelocirani i slobodni objekti

Predstavljanje objekata(cont.)

Na slici key 4 sledi objekat sa kljucem 16. Key 4 se pojavljuje ukey[2], a 16 u key[5]. Takodje, next[5]=2 i prev[2]=5.