Professional Documents
Culture Documents
P4 Red Sekvencijalna Rep 2012 3
P4 Red Sekvencijalna Rep 2012 3
doc
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.
ProgramiranjeI_sylabus.doc
#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();
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