Strukture podataka • Strukture podataka su složeni tipovi podataka – Nastaju primenom apstrakcije agregacije, tj. objedinjavanjem više jednostavnijih tipova podataka • Svaka konkretna vrednost strukture podataka sastoji se od jednostavnijih delova, koji predstavljaju njene elemente.
57
Embed
Strukture podataka su složeni tipovi podataka - pmf.ni.ac.rs · PDF fileU cirkularnim listama prev pokazivac glave liste pokazuje na
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Strukture podataka
• Strukture podataka su složeni tipovi podataka – Nastaju primenom apstrakcije agregacije, tj.
objedinjavanjem više jednostavnijih tipova podataka
• Svaka konkretna vrednost strukture podataka sastoji se od jednostavnijih delova, koji predstavljaju njene elemente.
Vrste struktura podataka
• Elementi mogu biti prosti ili složeni • Elementi u strukturi podataka mogu biti u nekom
međusobnom odnosu (relaciji) • Formalno struktura podataka može biti definisana kao
uređeni par S=(E,p) E je skup elemenata p je binarna relacija kojom je uređen skup E
• Pojedine vrste struktura podataka se definišu na osnovu toga kakav je njihov odnos, tj. kakve su osobine relacije p
• Najvažnija osobina relacije p je njena kardinalnost, koliko elemenata odgovara jednom elementu u datoj strukturi i obratno
Vrste struktura podataka
• Na osnovu kardinalnosti relacije р mogu se definisati sledeće vrste struktura: – 0:0 (ne postoji uređenje) - kolekcije i skupovi – 1:1 (linearno uređenje) – linearne strukture – 1:М - stabla – М:М – grafovi i mreže
Kolekcije i skupovi
– Elementi u strukturi nemaju međusobni odnos, tj. kardinalnost relacije p je 0:0
– Može se samo znati da li neki element pripada strukturi ili ne – Bliske su pojmu skupa u matematici, pa se tako i nazivaju – Skup nema duplikate (jedan isti element ne može dva puta biti
član skupa) – Kolekcija može imati duplikate (jedan isti element može biti dva
puta član kolekcije)
Skup
Linearne strukture
– Elementi u strukturi su linearno uredjeni, tj. kardinalnost relacije р je 1:1
– Osim jednom posebnom elementu koji se naziva prvi, svakom elementu prethoditačnojedan element.
– Osim jednom posebnom elementu koji se naziva poslednji, za svakim elementom sledi tačno jedan element
Linerana struktura
Prvi Poslednji
Stabla – hijerarhijske strukture
– Elementi u strukturi su linearno uređeni, tj. kardinalnost relacije р je 1:М
– Osim jednom posebnom elementu koji se naziva koren, svakom elementu prethodi tačno jedan element
– Iza svakog elementa može da sledi više elemenata
Stablo Koren
Grafovi ili mreže
– Elementi u strukturi su uređeni bez ograničenja, tj. Kardinalnost relacije р je М:М
– Svakom elementu može prethoditi više elemenata – Iza svakog elementa može da sledi više elemenata
Graf
Zaključak
• Navedene opšte strukture podataka pokrivaju sve moguće slučajeve – Svaka konkretna struktura podataka u praksi se svodi
na neku od navedenih • Za rešavanje problema u programiranju dovoljno
je poznavati kako se svaka od navedenih struktura implementira
• To je, upravo, predmet našeg izučavanja!
Vrste linearnih struktura
• Razlikuju se po mestu (lokaciji) gde se vrši ubacivanje i izbacivanje elemenata
• Stek (stack) – Ubaci i izbaci sa istog kraja
• Red (queue) – Ubaci na jednom i izbaci sa drugog kraja
• Dvostruki red (double queue - Deque) – Ubaci i izbaci na krajevima
• Lista (list) – ubaci/izbaci bilo gde
Stek (stack)
• LIFO struktura (Last In First Out) • Primer: Držač za Pez bombone
Stek (stack)
• Osnovne operacije – Ubacivanje (Push) – Izbacivanje (Pop)
• Ostale operacije – Vrati vrh (Peek) – Prazan stak? – Pun stak? – Broj elemenata
Red (queue)
• FIFO struktura (First In First Out) • Primer: Red u prodavnici
Jelena
Text Box
Dvostruki Red (queue)
• Primer:
Entitet
Stek (stack)
• Kao statička struktura
• Primer: 12 45 2 37
top
Presenter
Presentation Notes
Predstavlja se pomoću statičke strukture – niz
Stek (stack)
• Ubacivanje
pre nakon
12 45 2 37
top
12 45 2 17 37
top
Stek (stack)
• Izbacivanje
pre nakon
12 45 2 37
top
12 45 37
top
Red
• Red
Red
• Red
Red
• Red
Elementarne strukture podatakaOverviev
Povezane listeImplementacija pokaziva ca i objekata
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
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
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
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
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
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
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
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
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
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
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
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
Objekti koji se predstavljaju jednim nizomNelocirani i slobodni objekti
Predstavljanje objekata(cont.)
Reci se u memoriji racunara adresiraju celim brojevima od 0 doM-1, gde je M dovoljno veliki ceo broj. U nekim programskimjezicima jedan objekat zauzima niz uzastopnih lokacija umemoriji racunara. Pokazivac je, jednostavno, adresa prvememorijske lokacije objekta, a ostale memorijske lokacijeobjekata indeksiraju se dodavanjem neutralizacije pokazivacu.Slicnu strategiju možemo koristiti za implementaciju objekata uprogramskim okruženjima koja eksplicitno ne obezbedjuju tippodataka pokazivaca.Pretpostavimo da je objekat smešten u neprekidnom nizuA[j..k]. Svako polje objekta odgovara neutralizaciji ranga 0 dok-j, a pokazivac na objekat je indeksiran sa j.
Elementarne strukture podatakaOverviev
Povezane listeImplementacija pokaziva ca i objekata
Objekti koji se predstavljaju jednim nizomNelocirani i slobodni objekti
Predstavljanje objekata(cont.)
Ofseti koji odgovaraju key, next i prev, oznaceni su, u našemprimeru, respektivno sa 0,1,2.Da bi, za dati pokazivac i, procitali vrednost prev[i], na primer,dodajemo pokazivac i ofsetu 2 i citamo A[i+2].
Svaki objekat ovde se pojavljuje kao podniz dužine 3 u nizu.Pokazivac objekta je index prvog elementa u objektu, dokstrelice ukazuju na redosled objekata.
Elementarne strukture podatakaOverviev
Povezane listeImplementacija pokaziva ca i objekata
Objekti koji se predstavljaju jednim nizomNelocirani i slobodni objekti
Dodeljeni objekti
Da bi ubacili kljuc u dinamicki skup predstavljen dvostrukopovezanom listom moramo da dodelimo pokazivac trenutnoneiskorišcenom objektu u reprezentaciji povezane liste. Ovo jekorisno za skladištenje objekata koji nisu upotrebljeni upovezanoj listi, te mogu biti dodeljeni.U nekim sistemima postoji djubretar odgovoran da odredi kojisu objekti beskorisni.Posmatrajmo problem dodeljivanja istorodnih objekatakorišcenjem primera dvostruko povezane liste koja jepredstavljena višedimenzionalnim nizom.Pretpostavimo da niz u reprezentaciji ima dužinu m i dadinamicki skup u jednom trenutku sadrži n 6 m elemenata.
Elementarne strukture podatakaOverviev
Povezane listeImplementacija pokaziva ca i objekata
Objekti koji se predstavljaju jednim nizomNelocirani i slobodni objekti
Dodeljeni objekti(cont.)
Tada n objekata predstavlja elemente aktuelne u dinamickomskupu, dok je preostalih m-n objekata slobodno. Slobodniobjekti se mogu iskoristiti za predstavljanje elemenata koji bi ubuduce bili ubaceni u dinamicki sistem.
Definicija
Slobodne objekte cuvamo u jednostruko povezanoj listi kojunazivamo slobodna lista.
Slobodna lista koristi samo next niz koji smešta nextpokazivace u listu.Glava slobodne liste nosi globalnu promenljivu free. Važno jeda svaki objekat ima reprezentaciju ili u slobodnoj listi ili u listi Lkojom je predstavljen neprazan dinamicki skup.
Elementarne strukture podatakaOverviev
Povezane listeImplementacija pokaziva ca i objekata
Objekti koji se predstavljaju jednim nizomNelocirani i slobodni objekti
Dodeljeni objekti(cont.)
Slobodna lista je stek. Naredni objekat koji se dodeljuje je onajkoji je poslednji oslobodjen. Možemo upotrebiti niz naredbi zaPUSH i POP operacije steka za implementaciju procedura zadodeljivanje i oslobadjanje objekata, redom. Pretpostavljamoda globalna promenljiva free u narednim procedurama ukazujena prvi element slobodne liste.
Elementarne strukture podatakaOverviev
Povezane listeImplementacija pokaziva ca i objekata
Objekti koji se predstavljaju jednim nizomNelocirani i slobodni objekti
Dodeljeni objekti(cont.)
Na slikama vidimo efekat procedura ALLOCATE-OBJECT iFREE-OBJECT. (a) Strelice pokazuju strukturu free-liste. (b) jerezultat poziva procedure ALLOCATE-OBJECT() (koja cuva index 4),postavljajuci 25 u key[4] i poziva LIST-INSERT(L, 4). Nova free-listaima objekat 8, koji je bio next[4] u free-listi. (c) Posle izvršenjaLIST-DELETE(L, 5), pozivamo FREE-OBJECT(5). Objekat 5 postajenova glava free-liste, ciji je sledbenik 8 u free-listi.
Elementarne strukture podatakaOverviev
Povezane listeImplementacija pokaziva ca i objekata
Metod predstavljanja listi može se proširiti na proizvoljnuhomogenu, istorodnu strukturu podataka.Sada cemo videti kako se korenska stabla mogu predstavitipovezanim strukturama podataka. Tu cvorovi mogu imatiproizvoljan broj dece.Svaki cvor drveta predstavljen je nekim objektom. Kao i kodpovezanih listi pretpostavljamo da svaki cvor sadrži kljuc (key)polja. Nama su interesantna i korenska stabla saneogranicenim grananjem.
Elementarne strukture podatakaOverviev
Povezane listeImplementacija pokaziva ca i objekata
Šema za predstavljanje binarnog stabla može se proširiti doproizvoljne klase stabala, kod kojih je broj dece svakog cvoranajviše konstanta k: dete1, dete2, . . . , detek. Ova šema ne radikada je broj dece cvora neogranicen, obzirom da ne znamobroj polja koja treba u buduce dodeliti. Štaviše, kada je brojdece k ogranicen velikom konstantom, a najveci broj cvorovaima mali broj dece, gubi se dosta memorije.Na srecu, postoji pametna šema za korišcenje stabala savelikim brojem dece. U njima se mogu predstaviti levo dete idesni polubrat.Svaki cvor sadrži roditeljski pokazivac p i root[T] ukazuje nakoren stabla T.
Elementarne strukture podatakaOverviev
Povezane listeImplementacija pokaziva ca i objekata
Kod ovih stabala nemamo pokazivac za svako dete:1. Levo-dete[x] ukazuje na cvor koji je krajnje levo dete cvora x2. Desni-polubrat[x] ukazuje na polubrata od x neposredno sadesne strane. Ako cvor x nema dece onda je Levo-dete[x]=NIL,a ako je x krajnje desno dete svojih roditelja onda jeDesni-polubrat[x]=NIL.
Binarna stabla
Koristicemo polja p, left, right za smeštanje pokazivaca naroditeljski cvor, levo dete i desno dete datog cvora binarnogstabla T.Ako je p[x]=NIL, onda je x koren.
Elementarne strukture podatakaOverviev
Povezane listeImplementacija pokaziva ca i objekata
Ako cvor x nema levo dete, onda je left[x]=NIL i sl. za desnodete. Koren citavog stabla oznacen je atributom root[T]. Ako jeroot[T]=NIL stablo je prazno.
Algoritmi sortiranja
Razmotricemo neke metode za sortiranje podataka uzuvodjenje dve pretpostavke:(i) Prva je da su podaci na neki nacin numerisani, tj. od prvogdo n-tog podatka. Ovo se može postici smeštanjem podataka uniz (listu) korišcenjem pokazivaca ili na neki drugi nacin.(ii) Druga pretpostavka je, da je dato odredjeno totalnouredjenje i da podatke želimo da uredimo u skladu sa njim.