Algoritmi sortiranja Lista - nasport.pmf.ni.ac.rs
Transcript of 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.
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).
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.
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.
Elementarne strukture podatakaOverviev
Povezane listeImplementacija pokaziva ca i objekata
Predstavljanje korenskih stabalaAlgoritmi sortiranja
Stek
Stek(cont.)
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
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].
Elementarne strukture podatakaOverviev
Povezane listeImplementacija pokaziva ca i objekata
Predstavljanje korenskih stabalaAlgoritmi sortiranja
Queue
Queue(cont.)
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
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
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
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.
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.
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.
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
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
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
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].
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
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
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.
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.