Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 3

ProgramiranjeI_sylabus.

doc

Fakultet informacijskih tehnologija nbijedic@fit.ba

Red
U ovom materijalu je prikazan jedan primjer podataka apstraktnog tipa - red (Queue). Red se koristi za implementaciju bilo kog reda za ekanje u kome zahtjevi dolaze na kraj, a izlaze sa poetka. Jedan oigledan primjer je red za ekanje na kasi u marketu: kupac doe na kraj reda, pomjera se kako kupci ispred njega plate robu, a kada doe do kase i plati svoju kupovinu, izlazi iz reda. Dakle, red se moe zamisliti kao niz elemenata koji pristiu na jednom kraju, a iz reda odlaze na drugom kraju. Definisanje apstraktnog tipa podataka zapoinjemo definisanjem operacija koje mogu koristiti spoljni korisnici bez obaveze da prikau strukture podataka ili programiraju operacije. Definisanje reda Red je konaan niz elemenata istog tipa za koje su definisane sljedee operacije: 1. 2. 3. 4. 5. 6. 7. iniciranje reda, Q, da bude prazan, utvrivanje je li red, Q, prazan, utvrivanje je li red, Q, pun, dodavanje novog elementa, x, na kraj reda Q, ako Q nije pun (PushQ), ako je red Q neprazan, uklanjanje elementa sa sa poetka reda, (PopQ), identifikacija kraja reda (RearQ), identifikacija poetka reda (FrontQ).

Posljednje dvije operacije su za potrebe ovog kursa opcione, ali postoje implementirane u STL. One su analogne funkciji TopS kod steka, samo to u ovom sluaju struktura podataka ima dva kraja, pa se oba moraju identificirati.

Reprezentacije reda
U ovom kursu obraujemo dvije reprezentacije reda, sekvencijalnu i povezanu. Za sekvencijalnu reprezentaciju se koristi niz, a za povezanu lista. U ovom materijalu je prikazana sekvencijalna reprezentacija.

Primjene ATP reda - BUFFER


U operativnim sistemima se za komunikaciju ureaja koji rade razliitim brzinama koristi pomona memorija buffer. Jedan od primjera primjene reda je na primjer print buffer. Zahtjevi za tampanje koje alje procesor mogu dolaziti bre nego to ih tampa moe odtampati. U tom sluaju se odloeni zahtjevi, koji su pristigli tampau, ali on jo uvijek tampa neki od prethodnih zahtjeva, smjetaju u print buffer. Zahtjevi se smjetaju na kraj reda, a odlaze iz reda (briu se iz buffer-a) kada tampa moe da ih odtampa.

Algoritmi i strukture podataka::Predavanja http://dl.fit.ba/

ProgramiranjeI_sylabus.doc

Fakultet informacijskih tehnologija nbijedic@fit.ba

Implementacija reda sekvencijalna reprezentacija


Pretpostavimo da smo smjestili nekoliko elemenata reda za ekanje u niz, jedan za drugim. Nove elemente reda za ekanje umeemo na kraj, a uzimamo ih sa poetka niza. Na ovaj nain red putuje ka kraju niza i moe da iscrpi memoriju alociranu za niz. Zato nam ovakva reprezentacija i nije korisna. Da bi omoguili kretanje reda za ekanje kroz ogranieni memorijski prostor, smjetamo ga u cirkularnu traku, kojom moe da putuje koliko je potrebno. Simuliranje efekta cirkularne trake pomou niza je jednostavno ako se primjeni raun po modulu. Za raun po modulu N, se koriste izrazi u formi (X % N), ime se vrijednost X kree u rasponu 0 : N - 1. Izrazom (X % N) se postie ovaj efekat jer se u njemu rauna ostatak dijeljenja X sa N, a on je uvijek manji od N. Tako, novi element cirkularnog reda za ekanje umeemo na kraj niza (lokacija Rear), a zatim uveavamo Rear, ali kad god Rear dostigne vrijednost N, dodjeljujemo mu nulu. Analogno, uzimamo elemente iz cirkularnog reda za ekanje sa lokacije date indeksom Front. Poto uklonimo element, uveamo indeks i opet, kada Front dostigne dostigne vrijednost N, dodjeljujemo mu nulu. Dakle, potrebni su nam niz NizQ[0:N-1] i dva indeksa, Front i Rear. U programu za sekvencijalnu reprezentaciju reda za ekanje, red za ekanje je predstavljen strukturnim nizom koji se sastoji od: (1) brojaa, VelQ, u kome se uva broj elemenata reda za ekanje, (2) indeksa Front u kome se uva pozicija u nizu, narednog elementa koji se moe ukloniti sa poetka reda za ekanje, (3) indeksa Rear u kome se uva pozicija u nizu, na koju moe da se umetne naredni element reda za ekanje i (4) niza NizQ sa elementima reda za ekanje.

Sekvencijalna reprezentacija reda header file

#ifndef _RED_H #define _RED_H #include <iostream> using namespace std; #define maxsize 20; typedef int TipQ; int VelQ; TipQ NizQ[maxsize]; int Front; int Rear; void bool bool void TipQ InicirajQ(); PrazanQ(); PunQ(); PushQ(TipQ); PopQ();

void InicirajQ() { VelQ = 0; Front = 0; Rear = 0;


Algoritmi i strukture podataka::Predavanja http://dl.fit.ba/

ProgramiranjeI_sylabus.doc
cout<<"Red inicijaliziran!"<<endl; } bool PunQ() { if( VelQ == maxsize) return true; else return false; } bool PrazanQ() { if(VelQ == 0) return true; else return false; } void PushQ(TipQ element) { if(PunQ()) { cout<<"Greska, red je pun!!!"<<endl; } else { NizQ[Rear] = element; ++Rear; if (Rear >= maxsize) Rear = 0; ++VelQ; cout<<"Elemenat dodat u red! "<<endl; } } TipQ PopQ() { TipQ temp = 0; if (PrazanQ()) { cout<<"Greska, red je prazan!"<<endl; } else { temp = NizQ[Front]; ++Front; if (Front >= maxsize) Front = 0; --VelQ; cout<<"Elemenat uklonjen iz reda!"<<endl; } return temp; } #endif

Fakultet informacijskih tehnologija nbijedic@fit.ba

Algoritmi i strukture podataka::Predavanja http://dl.fit.ba/

You might also like