Literatura Dejan ivkovi, Osnove dizajna i analize algoritama, CET, Beograd, 2007 Robert Manger, Miljenko Marui, Strukture podataka i algoritmi, PMF Zagreb, skripta, 2007 ppt prezentacije D. Kalpia i kolega sa FER-a, Zagreb, 2007 Red Red ili red za ekanje je specijalna vrsta liste, (eng. queue ili FIFO lista, first-in-first- out) Elementi se ubacuju na jednom kraju liste (zadnji deo ili zaelje), a izbacuju na suprotnom kraju (prednji deo ili elo) Red ima glavu (prvi element) i rep (poslednji element) Novi element se uvek dodaje na kraj reda Ilustracija reda Primeri za red Ljudi koji ekaju na alteru banke ine red Lokalna mrea ima samo jedan tampa, koji odjednom moe tampati samo jednu datoteku, pa se formira red za tampanje Za implementaciju reda moe se koristiti lista U jezicima sa pokazivaima implementacija reda je skoro identina listi, samo to se koristi i pokaziva na kraj reda Kod implementacije pomou polja interesantno je reenje sa krunim poljem (cirkularno polje ili bafer) Apstraktni tip podataka QUEUE Definicija slina steku: elementtype . . . bilo koji tip QUEUE . . . podatak tipa QUEUE je konani niz podataka tipa elementtype MAKE NULL(&Q) . . . funkcija pretvara red Q u prazan red EMPTY(Q) . . . funkcija vraa istinu ako je Q prazan red, inae la ENQUEUE(x,&Q) . . . funkcija ubacuje element x na zaelje reda Q U terminima atp LIST, to je ekvivalentno sa INSERT(x,END(Q),&Q) Apstraktni tip podataka QUEUE DEQUEUE(&Q) . . . funkcija izbacuje element na elu reda Q Ekvivalentno sa DELETE(FIRST(Q),&Q) FRONT(Q) . . . funkcija vraa element na elu reda Q (red ostaje nepromjenjen) To je ekvivalentno sa RETRIEVE(FIRST(Q),Q) Implementacije reda se opet mogu dobiti iz implementacija liste, uz odgovarajua pojednostavljenja ili modifikacije Implementacija reda pomou cirkularnog polja Implementacija reda pomou polja moe biti doslovno preuzeta implementaciju liste pomou polja Operacija stavljanja u red, ENQUEUE( ), se tada obavlja u konstantnom vremenu, budui da ne zahteva pomeranje postojeih elemenata liste Ali, skidanje iz reda, DEQUEUE( ), nije jednako efikasna, jer zahteva da se celi ostatak reda prepie za jedno mesto na gore Tome moemo doskoiti tako da uvedemo jo jedan kursor koji pokazuje poetak reda Implementacija reda pomou cirkularnog polja Sada vie nema prepisivanja elemenata u listi, ali pojavila se nova potekoa: ubacivanjem/izbacivanjem red putuje prema donjem kraju polja stii emo do donjeg kraja, mada u poetnom delu polja ima jo mesta!
Bolje reenje je cirkularno polje !
Implementacija reda pomou cirkularnog polja Implementacija reda pomou cirkularnog polja Sa slike se vidi da nakon zadnjeg indeksa, maxlength ponovo sledi poetni indeks 0 Red zauzima niz uzastopnih elija posmatranog polja Uvodimo kursore za elo i za zaelje reda, front i rear Usled ubacivanja/izbacivanja elemenata, red putuje poljem u smeru kazaljke na satu Problem punog i praznog reda! Trebamo da razlikujemo situaciju praznog reda i sasvim punog reda (onog koji zauzima celo polje) Implementacija reda pomou cirkularnog polja Dva mogua reenja problema punog reda: izmeu ela i zaelja mora biti bar jedno prazno mesto, znai, red ne moe imati vie od MAXLENGTH - 1 elemenata cirkularnost se postie tako da s indeksima raunamo modulo MAXLENGTH Alternativno reenje: pun red i uvoenje dodatne varijable length koja pokazuje broj elemenata u redu Implementacija reda pomou pointera Poetak povezane liste je elo reda Dodajemo jo i pointer na kraj povezane liste Header olakava prikaz praznog reda Vreme izvravanja bilo koje operacije je opet O(1), kao to je to bilo i kod cirkularnog polja. Ilustracija implementacija reda pomou pointera ALGORITMI I STRUKTURE PODATAKA - Red - Prof. Duan Starevi