QUEUE
QUEUE
A queue is two ended data structure in which
items can be inserted from one end and taken out
from the other end. Therefore , the first item
inserted into queue is the first item to be taken out
from the queue. This property is called First in
First out [FIFO].
Queue Example
● A queue of people in the bank who are
trying to submit utility bills.
● A line of vehicle on the motorway toll plaza.
● Consider a shared printer in a computer
laboratory. Student can send their print
request to the printer and each print
request goto queue and serve one by one.
● Computer input operations performing
through mouse and keyboard are also
recorded into queue and serve on the basis
of FIFO.
Queue Operations
● Rear: is the tail/bottom of the queue. The entry at rear is the most
recently arrived item and must wait until the other entries are
present in the queue.
● Front: is the position from where items can be taken out from
queue. It is also termed as head or top of the queue. The entry at the
front position is ready to be served.
● Append: The operation to add an item at the rear position of the
queue is termed as append or enqueue. We can append items at the
rear position of the queue until the queue is not full. The rear points
towards the position where new item has been appended.
● Serve: The operation to remove an item from the front position of
the queue is termed as server or dequeue. We can serve the items in
the queue until the queue is not empty. The front points towards the
position from where the available item can be severed
Queue Operations
● IsEmpty: Queue is consider empty when there is no item on
front of the queue. IsEmpty operation checks for this condition and
return true if the queue is empty else return false.
● IsFull: If no element can be appended at rear of the queue then
queue consider as full. When rear of the queue reaches this limit,
then queue is full and the IsFull operation return true else return
false.
Abstract DataType of Queue
● Data/Attributes/Values:
int size; //maximum elements that queue can accommodate.
– int Front; //ready to serve position.
– int Rear; //last appended item position.
– Type Items; //Items that the queue can handle.
● Functions/Operations:
– CreateQueue(int size);
● Create queue that can contain size items.
– Void Append(Type n);
● Condition: queue is not full, then append at rear position.
– Type Server( );
● Condition: queue is not empty then return the front item.
Abstract DataType of Queue
● Functions/Operations:
– Int IsEmpty( );
● return true if queue is empty else return false.
– Int IsFull( );
● Return true if queue is full else return false.
Queue Physical Model
● Items A Z C D E
Queue Physical Model
● Items A Z C D E
Queue Physical Model
● Items A Z C D E
Queue Physical Model
● Items A Z C D E
Queue Physical Model
● Items A Z C D E
Queue Implementation In C++
● Template <class AnyType>
● Class Queue {
● Private:
– Int Size, Rear, Front;
– AnyType* Items;
● Public:
– Queue( ) { //default constructor
– Size =50; Rear = -1; Front = 0 //Front =0 is constant is Physical Model
– Items = new AnyType[Size];
● }
● Queue(int size) {
– Size=size; Rear = -1; Front = 0;
– Items = new AnyType[Size];
}
Queue Implementation In C++
● ~Queue ( ) {
– Delete [ ] Items; }
● Void Append (AnyType newItem) {
– If (!IsFull( ) )
● Items[++Rear ] = newItem;
– else
● Cout << “n Queue is Full … Append Failed”; }
● AnyType Server (void) {
– If (!IsEmpty ( ) )
● AnyType item =Item [Front]; // Same as item =item[0]
● for ( int i=0; i<Rear; i++ ) //Move each item one step forward
– Items[i] =Items [i+1];
● Rear --;
● Return item; }
– else
● Cout << “n Queue is empty … Serve failed”; }
Queue Implementation In C++
● Int IsEmpty ( ) { return (Rear == -1 ) ; }
● Int IsFull ( ) { return (Rear == (Size-1) ); }
● Void Display( ) {
● Cout<< “n”;
● If (IsEmpty( ) )
– cout<<”Empty”;
● Else
– for(int i=Rear; i>=Front; i—)
● cout<<Items[i]<< “ “;
● }
● }; //end physical Model Queue class
Queue Implementation In C++
● Void main( )
● { Queue<char> q(8);
● q.Display( );
● q.Append('A'); q.Display( );
● q.Append('C'); q.Display( );
● q.Serve( ); q.Display( );
● q.Append('G'); q.Display( );
● q.Append('D'); q.Display( );
● q.Append('M'); q.Display( );
● q.Serve( ); q.Display( );
● q.Append('Q'); q.Display( );
● q.Append('Z'); q.Display( );
● q.Append('R'); q.Display( );
● q.Serve();
● q.Append('J'); q.Display( );
● q.Append('H'); q.Display( );
● q.Append('W'); q.Display( );
● q.Append('E'); q.Display( );
● q.Serve( ); q.Display ( );
● getch( );
● }
Physical Model
Action Queue (Rear ← → Front ) Rear Front
Initial Empty -1 0
Append('A') A 0 0
Append('C') C A 1 0
Serve( ); C 0 0
Append('G') G C 1 0
Append('D') D G C 2 0
Append('M') M D G C 3 0
Serve( ); M D G 2 0
Append('Q') Q M D G 3 0
Append('Z') Z Q M D G 4 0
Append('R') R Z Q M D G 5 0
Serve( ); R Z Q M D 4 0
Append('J') J R Z Q M D 5 0
Append('H') H J R Z Q M D 6 0
Append('W') W H J R Z Q M D 7 0
Append('E') Queue Full … Append failed 7 0
Serve( ); W H J R Z Q M 6 0
Disadvantage of Physical Model
Queue
● On each server operation requires n move
operations, so that time efficiency of this
model is poor.
● To remove this poor efficiency while serve
is called “Single-Step Append-Serve
Model”. In this mode both rear and append
move.
Single Step Append-Serve Model
Action Queue (Rear ← → Front ) Rear Front
Initial Empty -1 0
Append('A') A 0 0
Append('C') C A 1 0
Serve( ); C 1 1
Append('G') G C 2 1
Append('D') D G C 3 1
Append('M') M D G C 4 1
Serve( ); M D G 4 2
Append('Q') Q M D G 5 2
Append('Z') Z Q M D G 6 2
Append('R') R Z Q M D G 7 2
Serve( ); R Z Q M D 7 3
Append('J') Queue Full … Append Fail 7 3
Append('H') Queue Full … Append Fail 7 3
Append('W') Queue Full … Append Fail 7 3
Append('E') Queue Full … Append Fail 7 3
Serve( ); R Z Q M 7 4
AnyType Serve(void) {
if(!IsEmpty( ) )
Return Items[Front++] ;
else
cout<<”Queue is Empty... Serve failed”;
}
– int IsEmpty() { return (Front > Rear ); }
– Int IsFull( ) { return (Rear == (Size-1) }
Single Step Append-Serve Model
Implementation
Disadvantage of Single Step
Append-Serve Model
Although time efficiency of single step
append-serve mode is good and no need
to move n element on each serve but
space utilization is poor.
Circular Queue
● The solution of append-serve model is
circular queue.
Circular Queue Implementation
● AnyType Append(AnyType new Item) {
If (!IsFull() ) {
Rear++
if(Rear == Size)
Rear=0;
Items[Rear]= newItem;
}
else
cout<<”Queue is full … Append failed.”;
}
Circular Queue Implementation
● AnyType Serve(void) {
If (!IsEmpty( ) {
AnyType item =Items[Front];
Front++;
If (Front ==Size)
Front=0;
Return item;
}
else
cout<<”Queue is Empty … serve failed”;
Circular Queue Implementation
● Int IsEmpty( ) {
Return (Front==NextPos(Rear) ); }
● Int Is Full() {
Return (Front ==NextPos(Nextpos(Rear)) ); }
● Int NextPos(int r ) {
r++;
if(r ==size)
r=0;
Return r;
}
Circular Queue Append-Serve Model
Action Queue (Rear ← → Front ) Rear Front
Initial Empty -1 0
Append('A') A 0 0
Append('C') C A 1 0
Serve( ); C 1 1
Append('G') G C 2 1
Append('D') D G C 3 1
Append('M') M D G C 4 1
Serve( ); M D G 4 2
Append('Q') Q M D G 5 2
Append('Z') Z Q M D G 6 2
Append('R') R Z Q M D G 7 2
Serve( ); R Z Q M D 7 3
Append('J') J R Z Q M D 0 3
Append('H') H J R Z Q M D 1 3
Append('W') Queue Full … Append Fail 1 3
Append('E') Queue Full … Append Fail 1 3
Serve( ); H J R Z Q M 1 4
Circular Queue Append-Serve Model
Action Queue (Rear ← → Front ) Rear Front
Serve( ); H J R Z 1 6
Serve( ); H J R 1 7
Serve( ); H J 1 0
Serve( ); H 1 1
Serve( ); Empty 1 2
Serve( ); Queue Empty … Serve Failed 1 2
Queue Application – Airport Simulation
Random Arrivals and
TakeOff
Results & comments Landing
(Rear ← → Front )
Takeoff
(Rear ← → Front)
Initial Simulation start Empty Empty
Landing.Append('G') Plane G Arrive for landing G Empty
Takeoff.Append('K') Plane K Arrive for Take-off G K
Landing.Append('Q') Plane Q Arrive for landing Q G K
Landing.Serve( ) Plane G landed Q K
Takeoff.Append('C') Plane C Arrive for Take-off Q C K
Landing.Append('R') Plane R Arrive for landing R Q C K
Landing.Serve( ) Plane Q landed R C K
Landing.Serve( ) Plane R landed Empty C K
Takeoff.Serve( ) Plane K Take off Empty C
Takeoff.Append('J') Plane J Arrive for Take-off Empty J C
Takeoff.Serve( ) Plane C Take off Empty J
Landing.Append('W') Plane W Arrive for landing W J
Takeoff.Append('K') Plane K Arrive for Take-off W K J
Landing.Serve( ) Plane W landed Empty K J
Takeoff.Serve( ) Plane J Take off Empty K
Takeoff.Serve( ) Plane K Take off Empty Empty
Priority Queue
● Priority queue is a data structure in which
items of the queue have priorities with
respect to each other. The items having
higher priority are served first and items
with lower priority are served later.
● Priority queue can implement on many
places e.g. On LAN shared printers print
request can print on the basis of priority.
Similarly Operating system has typically
queue of events. Each event has its own
priority and all event executed on their own
priority.
Priority Queue
● There are two type of priority queues
Minimum and Maximum.
● Minimum Priority Queue: A queue from
which the item that is minimum priority is
served first and the item having maximum
priority is served last.
● Maximum Priority Queue: A queue from
which the item that is maximum priority is
served first and the item having maximum
priority is served last.
Priority Queue ADT
Data/Attributes/Values
Int Size, Front, Rear;
Type Items;
Functions/Operations:
CreateQueue(int size);
//Create queue that can contain size items
Void place(Type n, int priority);
Condition: if queue is not full, then place at rear position w.r.t priority
For maximum priority queue the items with higher priorities are placed ahead of
lower priorities items and for minimum priority queue this is reverse.
● Type Serve( );
Condition: If queue is not empty then return the front item.
● Int IsEmpty ( ); Return 1 if queue is empty otherwise return 0
● Int IsFull( ); Return 1 if queue is full otherwise return 0
Priority Queue Implementation
# include <iostream.h>
● #include <conio.h>
● Template <class AnyType>
● Struct Item {
– AnyType Item;
– Int priority;
● Template <class AnyType>
● Class MaxPriorityQueue {
● private:
– int Size, Rear, Front;
– Item<AnyType>* Items;
● Public:
– MaxPriorityQueue ( ) //default constructor
– Size=50;
– Rear = -1
– Front = 0 //Always 0 in physical model
Items= new Item<AnyType>[Size];
}
● MaxPriorityQueue(int size) {
– Size = size;
– Rear = -1 ;
– Front = 0; //Always 0 in physical model
– Items = new Item<AnyType>[Size];
– }
● ~MaxpriorityQueue ( ) { delete[ ] Items; }
● Void Place(Item<AnyType> newItem) {
– if(IsEmpty( ) ) {
● Items [ ++Rear] = newItem;
– }
–
Priority Queue Implementation
if(!IsFull( ) ) {
Int i, putAt;
– For (i=Rear; i>=Front; i - - ) //Find where to
put item
if(newItem.priority <= Item[i].priority )
Break;
– PutAt=++ i //position where to put new item
– Rear ++;
– For (i=Rear; i>putAt; i-- ) //move item to
create space
● Item[i]=Items[ i -1];
– Items[putAt] = newItem;
– }
– Else
● cout<< “n Priority queue is Full. Place
failed “
● } // ending “} “ of place function
AnyType Serve(void) {
– if(!IsEmpty ( ) ) {
● AnyType item=Items[Front].Item;
● //same as item = item[ 0 ]
● for(int i=0; i<Rear; i++)
– Items[i] =Items[ i+1];
● Rear--;
● return item;
}
– else
– cout<<”nQueue is Empty... Serve failed”;
– }
– Int IsEmpty ( ) { return (Rear ==-1); }
– Int IsFull ( ) {return (Rear == (Size-1 ) ); }
– void Display( ) {
– cout<<endl <<Front<<' ' <<Rear<<' ' << “ “;
– If (IsEmpty( ) )
● cout<<”Empty”;
Priority Queue Implementation
– void Display( ) {
– cout<<endl <<Front<<' ' <<Rear<<' ' << “ “;
– If (IsEmpty( ) )
● cout<<”Empty”;
– else
● for(int i<Rear; i>=Front; i—)
– cout<<Item[i].Item<< ' ';
– }
– }; //end Physical model max priority Queue
class
– void main( ) {
– MaxpriorityQueue<char> q(8);
– Item<char> Items[ ] = { {'A', 0}, {'C', 0}, {'G', 1},
{'D', 0}, {'M', 2}, {'Q', 1},
{'Z', 2}, {'R', 1}, {'J', 3},
{'H', 0}, {'W', 1},{'E', 2}};
q.Display ( );
q.Place(Items[0]); q.Display( );
q.Place(Items[1]); q.Display( );
q.Serve( ) ;
q.Place(Items[2]); q.Display( );
q.Place(Items[3]); q.Display( );
q.Place(Items[4]); q.Display( );
q.Serve( );
q.Place(Items[5]); q.Display( );
q.Place(Items[6]); q.Display( );
q.Place(Items[7]); q.Display( );
q.Serve( );
q.Place(Items[8]); q.Display( );
q.Place(Items[9]); q.Display( );
q.Place(Items[9]); q.Display( );
q.Place(Items[9]); q.Display( );
● q.Serve( );
● getch ( ); }
Max Priority Queue (Physical Model)
Action Max priority Queue
(Rear ← → Front )
Front Rear
Initial Empty 0 -1
Place (A, 0) A, 0 0 0
Place (c, 0) C,0 A,0 0 1
Serve ( ) C, 0 0 0
Place (G, 1) C,0 G,1 0 1
Place (D, 0) D,0 C,0 G,1 0 2
Place (M, 2) D,0 C,0 G,1 M,2 0 3
Serve( ) D,0 C,0 G,1 0 2
Place (Q, 1) D,0 C,0 Q,1 G,1 0 3
Place (Z, 2) D,0 C,0 Q,1 G,1 Z,2 0 4
Place (R, 1) D,0 C,0 R,1 Q,1 G,1 Z,2 0 5
Serve( ) D,0 C,0 R,1 Q,1 G,1 0 4
Place (J, 3) D,0 C,0 R,1 Q,1 G,1 J,3 0 5
Place (H, 0) H,0 D,0 C,0 R,1 Q,1 G,1 J,3 0 6
Place (W, 1) H,0 D,0 C,0 W,1 R,1 Q,1 G,1 J,3 0 7
Place (E, 2) Priority Queue is Full..Place Failed 0 7
Serve( ) H,0 D,0 C,0 W,1 R,1 Q,1 G,1 0 6

More Related Content

PPTX
Unit 3 stack
PPT
Application of Stacks
PDF
Functional Programming 101 with Scala and ZIO @FunctionalWorld
PPTX
Stack data structure
PDF
Formal Languages and Automata Theory unit 3
PDF
Unit 3 stack
Application of Stacks
Functional Programming 101 with Scala and ZIO @FunctionalWorld
Stack data structure
Formal Languages and Automata Theory unit 3

What's hot (19)

PDF
Quick sort
PPTX
stack
PPT
03 stacks and_queues_using_arrays
PDF
Queues-handouts
PDF
11 - Programming languages
PDF
Functional programming-advantages
PDF
Linear search
PPT
Conversion of Infix To Postfix Expressions
PPSX
Stacks Implementation and Examples
PDF
Chapter03b
PDF
Applications of stack
PDF
Exploiting vectorization with ISPC
PPTX
Vectors,squence & list
PDF
Basic constructs ii
PPTX
Circular Queue
PPTX
Stack - Data Structure - Notes
PPTX
Classification of Compiler
PPT
강의자료8
PDF
Infix to Prefix (Conversion, Evaluation, Code)
Quick sort
stack
03 stacks and_queues_using_arrays
Queues-handouts
11 - Programming languages
Functional programming-advantages
Linear search
Conversion of Infix To Postfix Expressions
Stacks Implementation and Examples
Chapter03b
Applications of stack
Exploiting vectorization with ISPC
Vectors,squence & list
Basic constructs ii
Circular Queue
Stack - Data Structure - Notes
Classification of Compiler
강의자료8
Infix to Prefix (Conversion, Evaluation, Code)
Ad

Viewers also liked (9)

PPTX
Queue
PPTX
Queue Data Structure (w/ php egs)
PPT
PPTX
Ppt presentation of queues
PPT
Queue Data Structure
PDF
Queue as data_structure
PPT
Queue data structure
PPT
Notes DATA STRUCTURE - queue
Queue
Queue Data Structure (w/ php egs)
Ppt presentation of queues
Queue Data Structure
Queue as data_structure
Queue data structure
Notes DATA STRUCTURE - queue
Ad

Similar to Queue (20)

DOCX
PPTX
Unit 4 queue
PPTX
The presention is about the queue data structure
PPTX
Queue Data Structures Intro and Types of Queue
PPTX
Data Structures and Agorithm: DS 09 Queue.pptx
PPTX
Dynamic Queue.pptx
PPTX
UNIT II LINEAR DATA STRUCTURES – STACKS.pptx
PPTX
Queue(lecture8).pptx
PPTX
PPSX
Queue by rajanikanth
PPTX
Unit – iv queue
PPTX
PPTX
UNIT II LINEAR DATA STRUCTURES – STACKS.pptx
PPTX
Queue oop
DOCX
cs3381-object oriented programming-ab-manual
PPTX
Data Structures_Linear Data Structures Queue.pptx
PPTX
Queues_0748555555555555555555555526.pptx
PPT
Queue in Data Structure
PPT
Queue Data Structure
PDF
pure-functional-programming.pdf
Unit 4 queue
The presention is about the queue data structure
Queue Data Structures Intro and Types of Queue
Data Structures and Agorithm: DS 09 Queue.pptx
Dynamic Queue.pptx
UNIT II LINEAR DATA STRUCTURES – STACKS.pptx
Queue(lecture8).pptx
Queue by rajanikanth
Unit – iv queue
UNIT II LINEAR DATA STRUCTURES – STACKS.pptx
Queue oop
cs3381-object oriented programming-ab-manual
Data Structures_Linear Data Structures Queue.pptx
Queues_0748555555555555555555555526.pptx
Queue in Data Structure
Queue Data Structure
pure-functional-programming.pdf

More from Zaid Shabbir (13)

PPTX
Modern SDLC and QA.pptx
PPTX
Software Agility.pptx
PDF
Software Development Guide To Accelerate Performance
PDF
Software Testing and Agility
PDF
Data security and Integrity
PDF
Cloud computing &amp; dbms
PDF
No sql bigdata and postgresql
PDF
Files and data storage
PDF
PDF
Sorting
PDF
Tree and binary tree
PDF
Sorting
PDF
Introduction to data structure
Modern SDLC and QA.pptx
Software Agility.pptx
Software Development Guide To Accelerate Performance
Software Testing and Agility
Data security and Integrity
Cloud computing &amp; dbms
No sql bigdata and postgresql
Files and data storage
Sorting
Tree and binary tree
Sorting
Introduction to data structure

Recently uploaded (20)

PDF
Microsoft Office 365 Crack Download Free
PDF
AI Guide for Business Growth - Arna Softech
PDF
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
PPTX
Advanced SystemCare Ultimate Crack + Portable (2025)
DOCX
Modern SharePoint Intranet Templates That Boost Employee Engagement in 2025.docx
PPTX
Tech Workshop Escape Room Tech Workshop
PPTX
assetexplorer- product-overview - presentation
PDF
Autodesk AutoCAD Crack Free Download 2025
PDF
iTop VPN Crack Latest Version Full Key 2025
DOCX
How to Use SharePoint as an ISO-Compliant Document Management System
PDF
Ableton Live Suite for MacOS Crack Full Download (Latest 2025)
PDF
Website Design Services for Small Businesses.pdf
PDF
Top 10 Software Development Trends to Watch in 2025 🚀.pdf
PDF
AI/ML Infra Meetup | Beyond S3's Basics: Architecting for AI-Native Data Access
PPTX
Patient Appointment Booking in Odoo with online payment
PDF
How Tridens DevSecOps Ensures Compliance, Security, and Agility
PDF
AI/ML Infra Meetup | LLM Agents and Implementation Challenges
PDF
Time Tracking Features That Teams and Organizations Actually Need
PDF
Multiverse AI Review 2025: Access All TOP AI Model-Versions!
PDF
How to Make Money in the Metaverse_ Top Strategies for Beginners.pdf
Microsoft Office 365 Crack Download Free
AI Guide for Business Growth - Arna Softech
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
Advanced SystemCare Ultimate Crack + Portable (2025)
Modern SharePoint Intranet Templates That Boost Employee Engagement in 2025.docx
Tech Workshop Escape Room Tech Workshop
assetexplorer- product-overview - presentation
Autodesk AutoCAD Crack Free Download 2025
iTop VPN Crack Latest Version Full Key 2025
How to Use SharePoint as an ISO-Compliant Document Management System
Ableton Live Suite for MacOS Crack Full Download (Latest 2025)
Website Design Services for Small Businesses.pdf
Top 10 Software Development Trends to Watch in 2025 🚀.pdf
AI/ML Infra Meetup | Beyond S3's Basics: Architecting for AI-Native Data Access
Patient Appointment Booking in Odoo with online payment
How Tridens DevSecOps Ensures Compliance, Security, and Agility
AI/ML Infra Meetup | LLM Agents and Implementation Challenges
Time Tracking Features That Teams and Organizations Actually Need
Multiverse AI Review 2025: Access All TOP AI Model-Versions!
How to Make Money in the Metaverse_ Top Strategies for Beginners.pdf

Queue

  • 2. QUEUE A queue is two ended data structure in which items can be inserted from one end and taken out from the other end. Therefore , the first item inserted into queue is the first item to be taken out from the queue. This property is called First in First out [FIFO].
  • 3. Queue Example ● A queue of people in the bank who are trying to submit utility bills. ● A line of vehicle on the motorway toll plaza. ● Consider a shared printer in a computer laboratory. Student can send their print request to the printer and each print request goto queue and serve one by one. ● Computer input operations performing through mouse and keyboard are also recorded into queue and serve on the basis of FIFO.
  • 4. Queue Operations ● Rear: is the tail/bottom of the queue. The entry at rear is the most recently arrived item and must wait until the other entries are present in the queue. ● Front: is the position from where items can be taken out from queue. It is also termed as head or top of the queue. The entry at the front position is ready to be served. ● Append: The operation to add an item at the rear position of the queue is termed as append or enqueue. We can append items at the rear position of the queue until the queue is not full. The rear points towards the position where new item has been appended. ● Serve: The operation to remove an item from the front position of the queue is termed as server or dequeue. We can serve the items in the queue until the queue is not empty. The front points towards the position from where the available item can be severed
  • 5. Queue Operations ● IsEmpty: Queue is consider empty when there is no item on front of the queue. IsEmpty operation checks for this condition and return true if the queue is empty else return false. ● IsFull: If no element can be appended at rear of the queue then queue consider as full. When rear of the queue reaches this limit, then queue is full and the IsFull operation return true else return false.
  • 6. Abstract DataType of Queue ● Data/Attributes/Values: int size; //maximum elements that queue can accommodate. – int Front; //ready to serve position. – int Rear; //last appended item position. – Type Items; //Items that the queue can handle. ● Functions/Operations: – CreateQueue(int size); ● Create queue that can contain size items. – Void Append(Type n); ● Condition: queue is not full, then append at rear position. – Type Server( ); ● Condition: queue is not empty then return the front item.
  • 7. Abstract DataType of Queue ● Functions/Operations: – Int IsEmpty( ); ● return true if queue is empty else return false. – Int IsFull( ); ● Return true if queue is full else return false.
  • 8. Queue Physical Model ● Items A Z C D E
  • 9. Queue Physical Model ● Items A Z C D E
  • 10. Queue Physical Model ● Items A Z C D E
  • 11. Queue Physical Model ● Items A Z C D E
  • 12. Queue Physical Model ● Items A Z C D E
  • 13. Queue Implementation In C++ ● Template <class AnyType> ● Class Queue { ● Private: – Int Size, Rear, Front; – AnyType* Items; ● Public: – Queue( ) { //default constructor – Size =50; Rear = -1; Front = 0 //Front =0 is constant is Physical Model – Items = new AnyType[Size]; ● } ● Queue(int size) { – Size=size; Rear = -1; Front = 0; – Items = new AnyType[Size]; }
  • 14. Queue Implementation In C++ ● ~Queue ( ) { – Delete [ ] Items; } ● Void Append (AnyType newItem) { – If (!IsFull( ) ) ● Items[++Rear ] = newItem; – else ● Cout << “n Queue is Full … Append Failed”; } ● AnyType Server (void) { – If (!IsEmpty ( ) ) ● AnyType item =Item [Front]; // Same as item =item[0] ● for ( int i=0; i<Rear; i++ ) //Move each item one step forward – Items[i] =Items [i+1]; ● Rear --; ● Return item; } – else ● Cout << “n Queue is empty … Serve failed”; }
  • 15. Queue Implementation In C++ ● Int IsEmpty ( ) { return (Rear == -1 ) ; } ● Int IsFull ( ) { return (Rear == (Size-1) ); } ● Void Display( ) { ● Cout<< “n”; ● If (IsEmpty( ) ) – cout<<”Empty”; ● Else – for(int i=Rear; i>=Front; i—) ● cout<<Items[i]<< “ “; ● } ● }; //end physical Model Queue class
  • 16. Queue Implementation In C++ ● Void main( ) ● { Queue<char> q(8); ● q.Display( ); ● q.Append('A'); q.Display( ); ● q.Append('C'); q.Display( ); ● q.Serve( ); q.Display( ); ● q.Append('G'); q.Display( ); ● q.Append('D'); q.Display( ); ● q.Append('M'); q.Display( ); ● q.Serve( ); q.Display( ); ● q.Append('Q'); q.Display( ); ● q.Append('Z'); q.Display( ); ● q.Append('R'); q.Display( ); ● q.Serve(); ● q.Append('J'); q.Display( ); ● q.Append('H'); q.Display( ); ● q.Append('W'); q.Display( ); ● q.Append('E'); q.Display( ); ● q.Serve( ); q.Display ( ); ● getch( ); ● }
  • 17. Physical Model Action Queue (Rear ← → Front ) Rear Front Initial Empty -1 0 Append('A') A 0 0 Append('C') C A 1 0 Serve( ); C 0 0 Append('G') G C 1 0 Append('D') D G C 2 0 Append('M') M D G C 3 0 Serve( ); M D G 2 0 Append('Q') Q M D G 3 0 Append('Z') Z Q M D G 4 0 Append('R') R Z Q M D G 5 0 Serve( ); R Z Q M D 4 0 Append('J') J R Z Q M D 5 0 Append('H') H J R Z Q M D 6 0 Append('W') W H J R Z Q M D 7 0 Append('E') Queue Full … Append failed 7 0 Serve( ); W H J R Z Q M 6 0
  • 18. Disadvantage of Physical Model Queue ● On each server operation requires n move operations, so that time efficiency of this model is poor. ● To remove this poor efficiency while serve is called “Single-Step Append-Serve Model”. In this mode both rear and append move.
  • 19. Single Step Append-Serve Model Action Queue (Rear ← → Front ) Rear Front Initial Empty -1 0 Append('A') A 0 0 Append('C') C A 1 0 Serve( ); C 1 1 Append('G') G C 2 1 Append('D') D G C 3 1 Append('M') M D G C 4 1 Serve( ); M D G 4 2 Append('Q') Q M D G 5 2 Append('Z') Z Q M D G 6 2 Append('R') R Z Q M D G 7 2 Serve( ); R Z Q M D 7 3 Append('J') Queue Full … Append Fail 7 3 Append('H') Queue Full … Append Fail 7 3 Append('W') Queue Full … Append Fail 7 3 Append('E') Queue Full … Append Fail 7 3 Serve( ); R Z Q M 7 4
  • 20. AnyType Serve(void) { if(!IsEmpty( ) ) Return Items[Front++] ; else cout<<”Queue is Empty... Serve failed”; } – int IsEmpty() { return (Front > Rear ); } – Int IsFull( ) { return (Rear == (Size-1) } Single Step Append-Serve Model Implementation
  • 21. Disadvantage of Single Step Append-Serve Model Although time efficiency of single step append-serve mode is good and no need to move n element on each serve but space utilization is poor.
  • 22. Circular Queue ● The solution of append-serve model is circular queue.
  • 23. Circular Queue Implementation ● AnyType Append(AnyType new Item) { If (!IsFull() ) { Rear++ if(Rear == Size) Rear=0; Items[Rear]= newItem; } else cout<<”Queue is full … Append failed.”; }
  • 24. Circular Queue Implementation ● AnyType Serve(void) { If (!IsEmpty( ) { AnyType item =Items[Front]; Front++; If (Front ==Size) Front=0; Return item; } else cout<<”Queue is Empty … serve failed”;
  • 25. Circular Queue Implementation ● Int IsEmpty( ) { Return (Front==NextPos(Rear) ); } ● Int Is Full() { Return (Front ==NextPos(Nextpos(Rear)) ); } ● Int NextPos(int r ) { r++; if(r ==size) r=0; Return r; }
  • 26. Circular Queue Append-Serve Model Action Queue (Rear ← → Front ) Rear Front Initial Empty -1 0 Append('A') A 0 0 Append('C') C A 1 0 Serve( ); C 1 1 Append('G') G C 2 1 Append('D') D G C 3 1 Append('M') M D G C 4 1 Serve( ); M D G 4 2 Append('Q') Q M D G 5 2 Append('Z') Z Q M D G 6 2 Append('R') R Z Q M D G 7 2 Serve( ); R Z Q M D 7 3 Append('J') J R Z Q M D 0 3 Append('H') H J R Z Q M D 1 3 Append('W') Queue Full … Append Fail 1 3 Append('E') Queue Full … Append Fail 1 3 Serve( ); H J R Z Q M 1 4
  • 27. Circular Queue Append-Serve Model Action Queue (Rear ← → Front ) Rear Front Serve( ); H J R Z 1 6 Serve( ); H J R 1 7 Serve( ); H J 1 0 Serve( ); H 1 1 Serve( ); Empty 1 2 Serve( ); Queue Empty … Serve Failed 1 2
  • 28. Queue Application – Airport Simulation Random Arrivals and TakeOff Results & comments Landing (Rear ← → Front ) Takeoff (Rear ← → Front) Initial Simulation start Empty Empty Landing.Append('G') Plane G Arrive for landing G Empty Takeoff.Append('K') Plane K Arrive for Take-off G K Landing.Append('Q') Plane Q Arrive for landing Q G K Landing.Serve( ) Plane G landed Q K Takeoff.Append('C') Plane C Arrive for Take-off Q C K Landing.Append('R') Plane R Arrive for landing R Q C K Landing.Serve( ) Plane Q landed R C K Landing.Serve( ) Plane R landed Empty C K Takeoff.Serve( ) Plane K Take off Empty C Takeoff.Append('J') Plane J Arrive for Take-off Empty J C Takeoff.Serve( ) Plane C Take off Empty J Landing.Append('W') Plane W Arrive for landing W J Takeoff.Append('K') Plane K Arrive for Take-off W K J Landing.Serve( ) Plane W landed Empty K J Takeoff.Serve( ) Plane J Take off Empty K Takeoff.Serve( ) Plane K Take off Empty Empty
  • 29. Priority Queue ● Priority queue is a data structure in which items of the queue have priorities with respect to each other. The items having higher priority are served first and items with lower priority are served later. ● Priority queue can implement on many places e.g. On LAN shared printers print request can print on the basis of priority. Similarly Operating system has typically queue of events. Each event has its own priority and all event executed on their own priority.
  • 30. Priority Queue ● There are two type of priority queues Minimum and Maximum. ● Minimum Priority Queue: A queue from which the item that is minimum priority is served first and the item having maximum priority is served last. ● Maximum Priority Queue: A queue from which the item that is maximum priority is served first and the item having maximum priority is served last.
  • 31. Priority Queue ADT Data/Attributes/Values Int Size, Front, Rear; Type Items; Functions/Operations: CreateQueue(int size); //Create queue that can contain size items Void place(Type n, int priority); Condition: if queue is not full, then place at rear position w.r.t priority For maximum priority queue the items with higher priorities are placed ahead of lower priorities items and for minimum priority queue this is reverse. ● Type Serve( ); Condition: If queue is not empty then return the front item. ● Int IsEmpty ( ); Return 1 if queue is empty otherwise return 0 ● Int IsFull( ); Return 1 if queue is full otherwise return 0
  • 32. Priority Queue Implementation # include <iostream.h> ● #include <conio.h> ● Template <class AnyType> ● Struct Item { – AnyType Item; – Int priority; ● Template <class AnyType> ● Class MaxPriorityQueue { ● private: – int Size, Rear, Front; – Item<AnyType>* Items; ● Public: – MaxPriorityQueue ( ) //default constructor – Size=50; – Rear = -1 – Front = 0 //Always 0 in physical model Items= new Item<AnyType>[Size]; } ● MaxPriorityQueue(int size) { – Size = size; – Rear = -1 ; – Front = 0; //Always 0 in physical model – Items = new Item<AnyType>[Size]; – } ● ~MaxpriorityQueue ( ) { delete[ ] Items; } ● Void Place(Item<AnyType> newItem) { – if(IsEmpty( ) ) { ● Items [ ++Rear] = newItem; – } –
  • 33. Priority Queue Implementation if(!IsFull( ) ) { Int i, putAt; – For (i=Rear; i>=Front; i - - ) //Find where to put item if(newItem.priority <= Item[i].priority ) Break; – PutAt=++ i //position where to put new item – Rear ++; – For (i=Rear; i>putAt; i-- ) //move item to create space ● Item[i]=Items[ i -1]; – Items[putAt] = newItem; – } – Else ● cout<< “n Priority queue is Full. Place failed “ ● } // ending “} “ of place function AnyType Serve(void) { – if(!IsEmpty ( ) ) { ● AnyType item=Items[Front].Item; ● //same as item = item[ 0 ] ● for(int i=0; i<Rear; i++) – Items[i] =Items[ i+1]; ● Rear--; ● return item; } – else – cout<<”nQueue is Empty... Serve failed”; – } – Int IsEmpty ( ) { return (Rear ==-1); } – Int IsFull ( ) {return (Rear == (Size-1 ) ); } – void Display( ) { – cout<<endl <<Front<<' ' <<Rear<<' ' << “ “; – If (IsEmpty( ) ) ● cout<<”Empty”;
  • 34. Priority Queue Implementation – void Display( ) { – cout<<endl <<Front<<' ' <<Rear<<' ' << “ “; – If (IsEmpty( ) ) ● cout<<”Empty”; – else ● for(int i<Rear; i>=Front; i—) – cout<<Item[i].Item<< ' '; – } – }; //end Physical model max priority Queue class – void main( ) { – MaxpriorityQueue<char> q(8); – Item<char> Items[ ] = { {'A', 0}, {'C', 0}, {'G', 1}, {'D', 0}, {'M', 2}, {'Q', 1}, {'Z', 2}, {'R', 1}, {'J', 3}, {'H', 0}, {'W', 1},{'E', 2}}; q.Display ( ); q.Place(Items[0]); q.Display( ); q.Place(Items[1]); q.Display( ); q.Serve( ) ; q.Place(Items[2]); q.Display( ); q.Place(Items[3]); q.Display( ); q.Place(Items[4]); q.Display( ); q.Serve( ); q.Place(Items[5]); q.Display( ); q.Place(Items[6]); q.Display( ); q.Place(Items[7]); q.Display( ); q.Serve( ); q.Place(Items[8]); q.Display( ); q.Place(Items[9]); q.Display( ); q.Place(Items[9]); q.Display( ); q.Place(Items[9]); q.Display( ); ● q.Serve( ); ● getch ( ); }
  • 35. Max Priority Queue (Physical Model) Action Max priority Queue (Rear ← → Front ) Front Rear Initial Empty 0 -1 Place (A, 0) A, 0 0 0 Place (c, 0) C,0 A,0 0 1 Serve ( ) C, 0 0 0 Place (G, 1) C,0 G,1 0 1 Place (D, 0) D,0 C,0 G,1 0 2 Place (M, 2) D,0 C,0 G,1 M,2 0 3 Serve( ) D,0 C,0 G,1 0 2 Place (Q, 1) D,0 C,0 Q,1 G,1 0 3 Place (Z, 2) D,0 C,0 Q,1 G,1 Z,2 0 4 Place (R, 1) D,0 C,0 R,1 Q,1 G,1 Z,2 0 5 Serve( ) D,0 C,0 R,1 Q,1 G,1 0 4 Place (J, 3) D,0 C,0 R,1 Q,1 G,1 J,3 0 5 Place (H, 0) H,0 D,0 C,0 R,1 Q,1 G,1 J,3 0 6 Place (W, 1) H,0 D,0 C,0 W,1 R,1 Q,1 G,1 J,3 0 7 Place (E, 2) Priority Queue is Full..Place Failed 0 7 Serve( ) H,0 D,0 C,0 W,1 R,1 Q,1 G,1 0 6