Vous êtes sur la page 1sur 15

ALGORITMI I STRUKTURE

PODATAKA
- Red -

Prof. Duan Starevi


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

Vous aimerez peut-être aussi