Strukture podataka. Strukture podataka su složeni tipovi podataka

Similar documents
Struktura indeksa: B-stablo. ls/swd/btree/btree.html

Biznis scenario: sekcije pk * id_sekcije * naziv. projekti pk * id_projekta * naziv ꓳ profesor fk * id_sekcije

SIMPLE PAST TENSE (prosto prošlo vreme) Građenje prostog prošlog vremena zavisi od toga da li je glagol koji ga gradi pravilan ili nepravilan.

Podešavanje za eduroam ios

GUI Layout Manager-i. Bojan Tomić Branislav Vidojević

STABLA ODLUČIVANJA. Jelena Jovanovic. Web:

Uvod u relacione baze podataka

Nejednakosti s faktorijelima

AMRES eduroam update, CAT alat za kreiranje instalera za korisničke uređaje. Marko Eremija Sastanak administratora, Beograd,

IZDAVANJE SERTIFIKATA NA WINDOWS 10 PLATFORMI

OBJEKTNO ORIJENTISANO PROGRAMIRANJE

Ulazne promenljive se nazivaju argumenti ili fiktivni parametri. Potprogram se poziva u okviru programa, kada se pri pozivu navode stvarni parametri.

Otpremanje video snimka na YouTube

CJENIK APLIKACIJE CERAMIC PRO PROIZVODA STAKLO PLASTIKA AUTO LAK KOŽA I TEKSTIL ALU FELGE SVJETLA

Implementacija sparsnih matrica upotrebom listi u programskom jeziku C

1.7 Predstavljanje negativnih brojeva u binarnom sistemu

Klasterizacija. NIKOLA MILIKIĆ URL:

SAS On Demand. Video: Upute za registraciju:

Windows Easy Transfer

Eduroam O Eduroam servisu edu roam Uputstvo za podešavanje Eduroam konekcije NAPOMENA: Microsoft Windows XP Change advanced settings

MODEL OBJEKTI - VEZE KONCEPTI MODELA METODOLOGIJA MODELIRANJA

Advertising on the Web

Tema 11 Analiza algoritama, pretraživanje i sortiranjeu jeziku Python

CJENOVNIK KABLOVSKA TV DIGITALNA TV INTERNET USLUGE

BENCHMARKING HOSTELA

KAKO GA TVORIMO? Tvorimo ga tako, da glagol postavimo v preteklik (past simple): 1. GLAGOL BITI - WAS / WERE TRDILNA OBLIKA:

Idejno rješenje: Dubrovnik Vizualni identitet kandidature Dubrovnika za Europsku prijestolnicu kulture 2020.

MRS MRSLab08 Metodologija Razvoja Softvera Vežba 08

PROJEKTNI PRORAČUN 1

Port Community System

Priprema podataka. NIKOLA MILIKIĆ URL:

Programiranje kroz aplikacije. Subprocedure Opseg promenljivih Excel VBA objektni model

Upute za korištenje makronaredbi gml2dwg i gml2dgn

TRAJANJE AKCIJE ILI PRETHODNOG ISTEKA ZALIHA ZELENI ALAT

PROGRAMIRANJE I ALGORITMI

KAPACITET USB GB. Laserska gravura. po jednoj strani. Digitalna štampa, pun kolor, po jednoj strani USB GB 8 GB 16 GB.

Struktura i organizacija baza podataka

NIS PETROL. Uputstvo za deaktiviranje/aktiviranje stranice Veleprodajnog cenovnika na sajtu NIS Petrol-a

PROŠIRENI MODEL OBJEKTI-VEZE

IZRADA TEHNIČKE DOKUMENTACIJE

UNIVERZITET U BEOGRADU RUDARSKO GEOLOŠKI FAKULTET DEPARTMAN ZA HIDROGEOLOGIJU ZBORNIK RADOVA. ZLATIBOR maj godine

MRS MRSLab09 Metodologija Razvoja Softvera Vežba 09

3.2. Prikazati podatke o svim proizvodima, koji se proizvode u Zrenjaninu.

TEHNIKA I INFORMATIKA U OBRAZOVANJU

Metrički i generalizovani metrički prostori

Korak X1 X2 X3 F O U R T W START {0,1}

Direktan link ka kursu:

MRS. MRSLab03 Metodologija Razvoja Softvera Vežba 03 LAB Dijagram aktivnosti

Tutorijal za Štefice za upload slika na forum.

Modeli podataka. Model podataka - osnovne komponente

Ciljevi. Poslije kompletiranja ove lekcije trebalo bi se moći:

Programiranje baza podataka

INSTALIRANJE SOFTVERSKOG SISTEMA SURVEY

TEHNO SISTEM d.o.o. PRODUCT CATALOGUE KATALOG PROIZVODA TOPLOSKUPLJAJUĆI KABLOVSKI PRIBOR HEAT-SHRINKABLE CABLE ACCESSORIES

TRENING I RAZVOJ VEŽBE 4 JELENA ANĐELKOVIĆ LABROVIĆ

PLAN RADA. 1. Počnimo sa primerom! 2. Kako i zašto? 3. Pejzaž višestruke upotrebe softvera 4. Frameworks 5. Proizvodne linije softvera 6.

POSEBNA POGLAVLJA INDUSTRIJSKOG TRANSPORTA I SKLADIŠNIH SISTEMA

Bušilice nove generacije. ImpactDrill

INFORMACIONI SISTEMI ZA PODRŠKU MENADŽMENTU

Nizovi. Sintaksa. ili. var pera,mika,laza,...,zoran1,zoran2,...,pera1254:real;

Algoritamski aspekti razvoja i implementacije Web pretraživača

ENR 1.4 OPIS I KLASIFIKACIJA VAZDUŠNOG PROSTORA U KOME SE PRUŽAJU ATS USLUGE ENR 1.4 ATS AIRSPACE CLASSIFICATION AND DESCRIPTION

SUGENOV I ŠOKEOV INTEGRAL SA PRIMENOM U OBRADI SLIKA

Dr.Miroljub Banković, prof. Kragujevac, 2008.

MINISTRY OF THE SEA, TRANSPORT AND INFRASTRUCTURE

Permanent Expert Group for Navigation

DEFINISANJE TURISTIČKE TRAŽNJE

1. Instalacija programske podrške

PODSUSTAV ZA UPRAVLJANJE SPREMNIKOM UGRADBENOG RAČUNALA

Line arrangement problem

INFORMACIONI SISTEMI ZA PODRŠKU MENADŽMENTU

STRUČNA PRAKSA B-PRO TEMA 13

Pravljenje Screenshota. 1. Korak

FILOGENETSKA ANALIZA

int[] brojilo; // polje cjelih brojeva double[] vrijednosti; // polje realnih brojeva

ARHITEKTURA RAČUNARA

Sa druge strane neproto~no organizovan sistem ~ije je vreme ciklusa 25 ns ima}e propusnost od

- Vežba 1 (dodatan materijal) - Kreiranje Web šablona (template) pomoću softvera Adobe Photoshop CS

Tema 2: Uvod u sisteme za podršku odlučivanju (VEŽBE)

Statistička analiza algoritama za dinamičko upravljanje spremnikom

RANI BOOKING TURSKA LJETO 2017

Trening: Obzor financijsko izvještavanje i osnovne ugovorne obveze

JavaScript podrska u radu sa greskama

3D GRAFIKA I ANIMACIJA

VBA moduli. mr Milovan Milivojević dipl. ing. Visa Poslovno Tehnička Škola - Užice

SKINUTO SA SAJTA Besplatan download radova

IMPLEMENTACIJA PODLOGE ZA SARADNJU KROKI ALATA SA ALATIMA ZA UML MODELOVANJE OPŠTE NAMENE

PROGRAMIRANJE KROZ APLIKACIJE

Programiranje. Nastava: prof.dr.sc. Dražena Gašpar. Datum:

TEHNIĈKO VELEUĈILIŠTE U ZAGREBU ELEKTROTEHNIĈKI ODJEL Prof.dr.sc.KREŠIMIR MEŠTROVIĆ POUZDANOST VISOKONAPONSKIH PREKIDAĈA

Univerzitet u Beogradu Matematički fakultet. Mašina pravila ekspertski sistem dokazivanja zasnovan na pravilima. master rad

Uvod u programiranje II (za gimnazijalce)

CRNA GORA

msc Velimir Milanovic Unošenje prvih zapisa Kreiranje elektronskih obrazaca - formi Prva forma - Čitaoci U P I T I

Pregled metodologija:

Croatian Automobile Club: Contribution to road safety in the Republic of Croatia

za STB GO4TV in alliance with GSS media

Adapted for classroom use by

VEŠTAČKA INTELIGENCIJA I EKPERTNI SISTEMI

DOSTAVUANJE PONUDA ZA WIMAX MONTENEGRO DOO PODGORICA

Transcription:

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 Skup 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)

Linearne strukture Elementi u strukturi su linearno uredjeni, tj. kardinalnost relacije р je 1:1 Linerana struktura Prvi Poslednji 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

Stabla hijerarhijske strukture Elementi u strukturi su linearno uređeni, tj. kardinalnost relacije р je 1:М Stablo Koren 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

Grafovi ili mreže Elementi u strukturi su uređeni bez ograničenja, tj. Kardinalnost relacije р je М:М Graf Svakom elementu može prethoditi više elemenata Iza svakog elementa može da sledi više elemenata

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

Dvostruki Red (queue) Primer: Entitet

Stek (stack) Kao statička struktura Primer: 12 37 45 2 top

Stek (stack) Ubacivanje pre 12 37 45 2 top nakon 12 37 45 2 17 top

Stek (stack) Izbacivanje pre 12 37 45 2 top nakon 12 37 45 top

Red Red

Red Red

Red Red

Stek Lista Upoznajmo se, sada, sa reprezentacijom dinamičkih skupova jednostavnim strukturama koje koriste pokazivače (pointere). Lista apstrakcija linearnog uredjenja Najvažniji apstraktni tipovi podataka su oni kod kojih elementi domena imaju neku vrstu prirodnog uredjenja. Ovde će biti reči o apstraktnim tipovima podataka koji su zasnovani na linearnom uredjenju. Pojam linearnog uredjenja podrazumeva da je dat konačan skup elemenata S = {a 1, a 2,..., a n }, pri čemu se popsmatra konačan, uredjen niz elemenata-lista L = {b 0, b 1,..., b k }, dužine k N, pri čemu b i S, za i = 0, k i b 0 < b 1 < < b k.

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 sledeći način: Definicija (i) Prazna lista je lista; (ii)lista se sastoji od prvog elementa koji se naziva glava liste i liste preostalih elemenata koja se naziva rep; (iii) Svaka lista se dobija konačnom primenom pravila (i) i (ii).

Stek Stek i kju (queue) Stek i kju su dinamički sistemi iz kojih se elementi pomeraju skupovnom operacijom brisanja DELETE. U steku je element koji se briše iz liste onaj koji je poslednji, najskorije upisan, što znači da je stek implementacija LAST-IN, FRST-OUT ili LIFO. Iz queuea se uvek briše element koji je najduže u listi. To znači da je queue implementacija FIRST-IN, FRST-OUT ili FIFO. Postoji nekoliko efektivnih postupaka za implementaciju steka i kjua na računaru. Pokazaćemo kako se svaki od njih može implementirati upotrebom običnih nizova.

Stek Stek INSERT operacija kojom se neki element ubacuje u stek je PUSH,a DELETE operacija kojom se neki element briše iz steka je POP. Stek od najviše n elemenata možemo inplementirati nizom S[1..n]. Ovom nizu pridružujemo atribut top[s] koji označava poslednji unet element. Stek sadrži elemente S[1..top[S]], gde je 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 će biti UNDERFLOWS (ispod toka) što znači da se javlja greška. Ako top[s] prelazi n stek će biti OVERFLOWS (iznad toka). Stek operacije PUSH, POP i Stack-Empty mogu se implementirati u nekoliko linija koda.

Stek Stek(cont.)

Stek Stek(cont.) POP(S) IF Stack Empty(S) THEN ERROR UNDERFLOW ELSE top[s] top[s] 1 RETURN S[top[S] + 1] END

Queue Queue (Kju) I na kjuu se definišu osnovne operacije ubacivanja i brisanja podataka. Operacije INSERT operacija na kjuu je ENQUEUE, a DELETE operacija DEQUEUE. Kao i POP operacija na steku i DEQUEUE operacija nema ni jedan argument. Kju ima glavu head i rep tail. Element se dopisuje operacijom ENQUEUE tako što zauzima svoje mesto na repu. Element koji se briše je, uvek, element smešten na mesto glave. Sledeća slika pokazuje način implementacije kjua korišćenjem niza Q[1..n].

Queue Queue(cont.)

Queue Queue(cont.) head[q] indeksira, tj. pokazuje na glavu kjua; tail[q] indeksira narednu lokaciju u koju bi bio upisan novopristižući element. Dakle, u kjuu su elementi na lokacijama head[q], head[q] + 1,..., tail[q] 1, pri čemu se "krećemo u krug" u smislu da lokacija 1 neposredno sledi lokaciju n u cikličnom smislu. Napomena Kada je head[q]=tail[q] kju je prazan. Za inicijalna stanja uzima se head[q]=tail[q]=1

Queue Queue(cont.) Kada je kji prazan, primena operacije DEQUEUE daje UNDERFLOW. Kju je pun kada je head[q]=tail[q]+1 i dopisivanje elementa ukazuje na OVERFLOW. ENQUEUE(Q, x) END Q[tail[Q]] x IF tail[q] = length[q] THEN tail[q] 1 ELSE tail[q] = tail[q] + 1

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

Pretraživanje povezanih listi Upis u povezanu listu Brisanje iz povezane liste Sentinel Definicija su strukture podataka čiji su objekti sortirani prema linearnom uredjenju. Uredjenje u povezanim listama odredjeno je pokazivačem na svaki objekat. Liste mogu imati nekoliko formi. One mogu biti jednostruko ili dvostruko povezane, mogu biti sortirane ili ne, mogu biti cirkularne ili ne. Ako je lista jednostruko povezana imamo samo jedan pointer next[x] koji pokazuje na sledbenika proizvoljno izabranog elementa x iz liste.

Pretraživanje povezanih listi Upis u povezanu listu Brisanje iz povezane liste Sentinel (cont.) Ako je reč o sortiranoj listi, linearno uredjenje liste odgovara linearnom uredjenju ključeva koji ukazuju na pozicije u kojima su smešteni elementi liste. U tom slučaju je minimalni element smešten na mestu glave, a maksimalni u repu liste. Cirkularne liste Cirkularne liste su dvostruko-povezane liste sa dva pokazivača prev, koji pokazuje na element koji prethodi izabranom elementu, i next, koji pokazuje na sledbenika datog elementa.

Pretraživanje povezanih listi Upis u povezanu listu Brisanje iz povezane liste Sentinel Pretraživanje Napomena U cirkularnim listama prev pokazivač glave liste pokazuje na rep i next pokazivač repa liste pokazuje na glavu liste. Zato cirkularnu listu možemo posmatrati kao presten elemenata. Procedura pretraživanja povezane liste L, LIST-SEARCH(L,k), pronalazi prvi element na poziciji ključa k u listi L, prostim linearnim pretraživanjem dovodeći pokazivač do ovog elementa.

Pretraživanje povezanih listi Upis u povezanu listu Brisanje iz povezane liste Sentinel Pretraživanje LIST SEARCH(L, k) x head[l] WHILE x NIL and key[x] k DO x next[x] RETURN x END

Pretraživanje povezanih listi Upis u povezanu listu Brisanje iz povezane liste Sentinel Upis Dati element x čiji je ključ već postavljen upisaćemo ispred povezane liste narednom procedurom: LIST INSERT(L, X) END next[x] head[l] IF head[l] NIL THEN prev[head[l]] x head[l] x prev[x] NIL

Pretraživanje povezanih listi Upis u povezanu listu Brisanje iz povezane liste Sentinel Brisanje Naredna procedura "seli" element x iz povezane liste L.Ako je dat pointer na element x, apdejtovanjem pokazivača x se "udaljava iz povezane liste". Ako je dat samo element x bez pokazivača najpre moramo pozvati proceduru LIST-SEARCH da postavimo pointer na ovaj element. LIST DELETE(L, x) END IF prev[x] NIL THEN next[prev[x]] next[x] ELSE head[l] next[x] IF next[x] NIL THEN prev[next[x]] prev[x]

Pretraživanje povezanih listi Upis u povezanu listu Brisanje iz povezane liste Sentinel Stražar (Sentinel) Pseudokod za LIST-DELETE bio bi jednostavniji ako bismo mogli da ignorišemo granične uslove za glavu i rep liste. LIST DELETE 1 (L, X) END next[prev[x]] next[x] prev[next[x]] prev[x] Stražar je lažni objekat koji nam dozvoljava da pojednostavimo granične uslove. Na primer, pretpostavimo da smo sa listom L predvideli objekat NIL[L] koji označava NIL, ali može da sadrži i sva polja drugih elemenata liste. Kad god smo upućeni na NIL u kodu liste, vršimo zamenu te karakteristike stražarom NIL[L].

Pretraživanje povezanih listi Upis u povezanu listu Brisanje iz povezane liste Sentinel Stražar (cont.) Ubacimo stražara NIL[L] izmedju glave i repa, tj. neka next[nil[l]] pokazuje glavu, a prev[nil[l]] rep. Takodje, next polje za rep i prev za glavu su prikazani sa NIL[L]. LIST SEARCH 1 (L, k) END x next[nil[l]] WHILE x NIL[L] and key[x] k DO x next[x] RETURN x

Pretraživanje povezanih listi Upis u povezanu listu Brisanje iz povezane liste Sentinel Stražar(cont.) LIST INSERT 1 (L, x) next[x] next[nil[l]] prev[next[nil[l]]] x next[nil[l]] x prev[x] NIL[L] END

Objekti koji se predstavljaju jednim nizom Nelocirani i slobodni objekti Predstavljanje objekata Videćemo kako se mogu implementirati povezane strukture podataka, bez objašnjavanja kom tipu podataka pripadaju pokazivači. I objekte i pokazivače uzimaćemo iz nizova. Kolekcije objekata koje imaju ista polja, mogu se predstaviti korišćenjem niza za svako polje. Za dati niz indekasa x, key[x], next[x], prev[x] ukazuju na mesto objekata u povezanoj listi. U odnosu na ovakvu interpolaciju, pokazivač x je zajednički indeks za key, next i prev indekse.

Objekti koji se predstavljaju jednim nizom Nelocirani i slobodni objekti Predstavljanje objekata(cont.) Na slici key 4 sledi objekat sa ključem 16. Key 4 se pojavljuje u key[2], a 16 u key[5]. Takodje, next[5]=2 i prev[2]=5.

Objekti koji se predstavljaju jednim nizom Nelocirani i slobodni objekti Predstavljanje objekata(cont.) Reči se u memoriji računara adresiraju celim brojevima od 0 do M-1, gde je M dovoljno veliki ceo broj. U nekim programskim jezicima jedan objekat zauzima niz uzastopnih lokacija u memoriji računara. Pokazivač je, jednostavno, adresa prve memorijske lokacije objekta, a ostale memorijske lokacije objekata indeksiraju se dodavanjem neutralizacije pokazivaču. Sličnu strategiju možemo koristiti za implementaciju objekata u programskim okruženjima koja eksplicitno ne obezbedjuju tip podataka pokazivača. Pretpostavimo da je objekat smešten u neprekidnom nizu A[j..k]. Svako polje objekta odgovara neutralizaciji ranga 0 do k-j, a pokazivač na objekat je indeksiran sa j.

Objekti koji se predstavljaju jednim nizom Nelocirani i slobodni objekti Predstavljanje objekata(cont.) Ofseti koji odgovaraju key, next i prev, označeni su, u našem primeru, respektivno sa 0,1,2. Da bi, za dati pokazivač i, pročitali vrednost prev[i], na primer, dodajemo pokazivač i ofsetu 2 i čitamo A[i+2]. Svaki objekat ovde se pojavljuje kao podniz dužine 3 u nizu. Pokazivač objekta je index prvog elementa u objektu, dok strelice ukazuju na redosled objekata.

Objekti koji se predstavljaju jednim nizom Nelocirani i slobodni objekti Dodeljeni objekti Da bi ubacili ključ u dinamički skup predstavljen dvostruko povezanom listom moramo da dodelimo pokazivač trenutno neiskorišćenom objektu u reprezentaciji povezane liste. Ovo je korisno za skladištenje objekata koji nisu upotrebljeni u povezanoj listi, te mogu biti dodeljeni. U nekim sistemima postoji djubretar odgovoran da odredi koji su objekti beskorisni. Posmatrajmo problem dodeljivanja istorodnih objekata korišćenjem primera dvostruko povezane liste koja je predstavljena višedimenzionalnim nizom. Pretpostavimo da niz u reprezentaciji ima dužinu m i da dinamički skup u jednom trenutku sadrži n m elemenata.

Objekti koji se predstavljaju jednim nizom Nelocirani i slobodni objekti Dodeljeni objekti(cont.) Tada n objekata predstavlja elemente aktuelne u dinamičkom skupu, dok je preostalih m-n objekata slobodno. Slobodni objekti se mogu iskoristiti za predstavljanje elemenata koji bi u buduće bili ubačeni u dinamički sistem. Definicija Slobodne objekte čuvamo u jednostruko povezanoj listi koju nazivamo slobodna lista. Slobodna lista koristi samo next niz koji smešta next pokazivače u listu. Glava slobodne liste nosi globalnu promenljivu free. Važno je da svaki objekat ima reprezentaciju ili u slobodnoj listi ili u listi L kojom je predstavljen neprazan dinamički skup.

Objekti koji se predstavljaju jednim nizom Nelocirani i slobodni objekti Dodeljeni objekti(cont.)

Objekti koji se predstavljaju jednim nizom Nelocirani i slobodni objekti Dodeljeni objekti(cont.) Slobodna lista je stek. Naredni objekat koji se dodeljuje je onaj koji je poslednji oslobodjen. Možemo upotrebiti niz naredbi za PUSH i POP operacije steka za implementaciju procedura za dodeljivanje i oslobadjanje objekata, redom. Pretpostavljamo da globalna promenljiva free u narednim procedurama ukazuje na prvi element slobodne liste.

Objekti koji se predstavljaju jednim nizom Nelocirani i slobodni objekti Dodeljeni objekti(cont.) Na slikama vidimo efekat procedura ALLOCATE-OBJECT i FREE-OBJECT. (a) Strelice pokazuju strukturu free-liste. (b) je rezultat poziva procedure ALLOCATE-OBJECT() (koja čuva index 4), postavljajući 25 u key[4] i poziva LIST-INSERT(L, 4). Nova free-lista ima objekat 8, koji je bio next[4] u free-listi. (c) Posle izvršenja LIST-DELETE(L, 5), pozivamo FREE-OBJECT(5). Objekat 5 postaje nova glava free-liste, čiji je sledbenik 8 u free-listi.

Korenska stabala sa neograničenim grananjem Metod predstavljanja listi može se proširiti na proizvoljnu homogenu, istorodnu strukturu podataka. Sada ćemo videti kako se korenska stabla mogu predstaviti povezanim strukturama podataka. Tu čvorovi mogu imati proizvoljan broj dece. Svaki čvor drveta predstavljen je nekim objektom. Kao i kod povezanih listi pretpostavljamo da svaki čvor sadrži ključ (key) polja. Nama su interesantna i korenska stabla sa neograničenim grananjem.

Korenska stabala sa neograničenim grananjem Korenska stabala sa neograničenim grananjem Šema za predstavljanje binarnog stabla može se proširiti do proizvoljne klase stabala, kod kojih je broj dece svakog čvora najviše konstanta k: dete 1, dete 2,..., dete k. Ova šema ne radi kada je broj dece čvora neograničen, obzirom da ne znamo broj polja koja treba u buduće dodeliti. Štaviše, kada je broj dece k ograničen velikom konstantom, a najveći broj čvorova ima mali broj dece, gubi se dosta memorije. Na sreću, postoji pametna šema za korišćenje stabala sa velikim brojem dece. U njima se mogu predstaviti levo dete i desni polubrat. Svaki čvor sadrži roditeljski pokazivač p i root[t] ukazuje na koren stabla T.

Korenska stabala sa neograničenim grananjem Binarna stabla Kod ovih stabala nemamo pokazivač za svako dete: 1. Levo-dete[x] ukazuje na čvor koji je krajnje levo dete čvora x 2. Desni-polubrat[x] ukazuje na polubrata od x neposredno sa desne strane. Ako čvor x nema dece onda je Levo-dete[x]=NIL, a ako je x krajnje desno dete svojih roditelja onda je Desni-polubrat[x]=NIL. Binarna stabla Koristićemo polja p, left, right za smeštanje pokazivača na roditeljski čvor, levo dete i desno dete datog čvora binarnog stabla T. Ako je p[x]=nil, onda je x koren.

Korenska stabala sa neograničenim grananjem Binarna stabla(cont.) Ako čvor x nema levo dete, onda je left[x]=nil i sl. za desno dete. Koren čitavog stabla označen je atributom root[t]. Ako je root[t]=nil stablo je prazno. Razmotrićemo neke metode za sortiranje podataka uz uvodjenje dve pretpostavke: (i) Prva je da su podaci na neki način numerisani, tj. od prvog do n-tog podatka. Ovo se može postići smeštanjem podataka u niz (listu) korišćenjem pokazivača ili na neki drugi način. (ii) Druga pretpostavka je, da je dato odredjeno totalno uredjenje i da podatke želimo da uredimo u skladu sa njim.