SlideShare a Scribd company logo
1
Queues
2
Queues
“A Queue is a special kind of list, where
items are inserted at one end (the rear)
And deleted at the other end (the front)”
Other Name:
 First In First Out (FIFO)
Difference from Stack:
Insertion go at the end of the list, rather
than the beginning of the list.
3
Common Operations on Queues
(Queue ADT)
1. MAKENULL(Q): Makes Queue Q be an empty list.
2. FRONT(Q): Returns the first element on Queue Q.
3. ENQUEUE(x,Q): Inserts element x at the end of
Queue Q.
4. DEQUEUE(Q): Deletes the first element of Q.
5. EMPTY(Q): Returns true if and only if Q is an empty
queue.
Example:
Line of customers in a bank
4
Applications of Queues
Operating system
multi-user/multitasking environments, where
several users or task may be requesting the
same resource simultaneously.
Communication Software
queues to hold information received over
networks and dial up connections. (Information
can be transmitted faster than it can be
processed, so is placed in a queue waiting to
be processed)
Some other?
5
Implementation
Static
Queue is implemented by an array, and size of
queue remains fix
Dynamic
A queue can be implemented as a linked list,
and expand or shrink with each enqueue or
dequeue operation.
6
7
A pointer Implementation of Queues
Keep two pointers:
 FRONT: A pointer to the first element of the
queue.
 REAR: A pointer to the last element of the
queue.
x y .zFront
Rear
8
A pointer Implementation of Queues
Q.front
Q.Rear
MAKENULL(Q)
Q.front
Q.Rear
ENQUEUE(x,Q)
.x
NULL
9
Q.front
Q.Rear
ENQUEUE(y,Q)
x .y
Q.front
Q.Rear
DEQUEUE(Q)
.y
A pointer Implementation of Queues
10
A class for Dynamic Queue implementation
class DynIntQueue
{
private:
struct QueueNode
{
int value;
QueueNode *next;
};
QueueNode *front;
QueueNode *rear;
int numItems;
public:
DynIntQueue(void);
~DynIntQueue(void);
void enqueue(int);
int dequeue(void);
bool isEmpty(void);
void makeNull(void);
};
11
Implemenaton
//************************
// Constructor *
//************************
DynIntQueue::DynIntQueue(void)
{
front = NULL;
rear = NULL;
numItems = 0;
}
//************************
// Destructor *
//************************
DynIntQueue::~DynIntQueue(void)
{
makeNull();
}
12
//********************************************
// Function enqueue inserts the value in num *
// at the rear of the queue. *
//********************************************
void DynIntQueue::enqueue(int num)
{
QueueNode *newNode;
newNode = new QueueNode;
newNode->value = num;
newNode->next = NULL;
if (isEmpty())
{
front = newNode;
rear = newNode;
}
else
{
rear->next = newNode;
rear = newNode;
}
numItems++;
}
13
//**********************************************
// Function dequeue removes the value at the *
// front of the queue, and copies it into num. *
//**********************************************
int DynIntQueue::dequeue(void)
{
QueueNode *temp;
int num;
if (isEmpty())
cout << "The queue is empty.n";
else
{
num = front->value;
temp = front->next;
delete front;
front = temp;
numItems--;
}
return num;
}
14
//*********************************************
// Function isEmpty returns true if the queue *
// is empty, and false otherwise. *
//*********************************************
bool DynIntQueue::isEmpty(void)
{
if (numItems)
return false;
else
return true;
}
15
//********************************************
// Function makeNull dequeues all the elements *
// in the queue. *
//********************************************
void DynIntQueue::makeNull(void)
{
while(!isEmpty())
dequeue();
}
16
Program
// This program demonstrates the DynIntQeue class
void main(void)
{
DynIntQueue iQueue;
cout << "Enqueuing 5 items...n";
// Enqueue 5 items.
for (int x = 0; x < 5; x++)
iQueue.enqueue(x);
// Deqeue and retrieve all items in the queue
cout << "The values in the queue were:n";
while (!iQueue.isEmpty())
{
int value;
value =iQueue.dequeue();
cout << value << endl;
}
}
17
Program Ouput
Enqueuing 5 items...
The values in the queue were:
0
1
2
3
4
18
Array Implementation
First Element
Last Element
maxlength
Front
Second
Element.
.
Rear
When queue is empty both front and rear are set to -1
While enqueueing increment rear by 1, and while dequeueing
increment front by 1
When there is only one value in the Queue, both rear and front
have same index
Can we implement Queue by using only one
index variable Front or Rear??
YES, by moving elements of array to neighboring
locations like we did in STACK but this is in-
efficient
Why it is inefficient?
19
Array Implementation
5 4 6 7 8 7 6
0 1 2 3 4 5 6 7 8
Front=0
Rear=6
8 7 6
0 1 2 3 4 5 6 7 8
Front=4
Rear=6
7 6 12 67
0 1 2 3 4 5 6 7 8
Front=5
Rear=8
How can we insert more elements? Rear index can
not move beyond the last element….
20
Solution: Using circular queue
Allow rear to wrap around the array.
if(rear == queueSize-1)
rear = 0;
else
rear++;
Or use module arithmetic
rear = (rear + 1) % queueSize;
21
7 6 12 67
0 1 2 3 4 5 6 7 8
Front=5
Rear=8
Enqueue 39 Rear=(Rear+1) mod Queue Size = (8+1) mod 9 = 0
39 7 6 12 67
0 1 2 3 4 5 6 7 8
Front=5
Rear=0
22
How to determine empty and full
Queues?
It is some tricky
Number of approaches
A counter indicating number of values in the
queue can be used (We will use this approach)
We will see another approach as well at the
end
23
Implementation
class IntQueue
{
private:
int *queueArray;
int queueSize;
int front;
int rear;
int numItems;
public:
IntQueue(int);
~IntQueue(void);
void enqueue(int);
int dequeue(void);
bool isEmpty(void);
bool isFull(void);
void clear(void);
};
Note, the member function clear, which clears the queue by resetting the
front and rear indices, and setting the numItems to 0.
24
IntQueue::IntQueue(int s) //constructor
{
queueArray = new int[s];
queueSize = s;
front = -1;
rear = -1;
numItems = 0;
}
IntQueue::~IntQueue(void) //destructor
{
delete [] queueArray;
}
25
//********************************************
// Function enqueue inserts the value in num *
// at the rear of the queue. *
//********************************************
void IntQueue::enqueue(int num)
{
if (isFull())
cout << "The queue is full.n";
else
{
// Calculate the new rear position
rear = (rear + 1) % queueSize;
// Insert new item
queueArray[rear] = num;
// Update item count
numItems++;
}
}
26
//*********************************************
// Function dequeue removes the value at the *
// front of the queue, and copies t into num. *
//*********************************************
int IntQueue::dequeue(void)
{
if (isEmpty())
cout << "The queue is empty.n";
else
{
// Move front
front = (front + 1) % queueSize;
// Retrieve the front item
int num = queueArray[front];
// Update item count
numItems--;
}
return num;
}
27
//*********************************************
// Function isEmpty returns true if the queue *
// is empty, and false otherwise. *
//*********************************************
bool IntQueue::isEmpty(void)
{
if (numItems)
return false;
else
return true;
}
28
//********************************************
// Function isFull returns true if the queue *
// is full, and false otherwise. *
//********************************************
bool IntQueue::isFull(void)
{
if (numItems < queueSize)
return false;
else
return true;
}
29
//*******************************************
// Function clear resets the front and rear *
// indices, and sets numItems to 0. *
//*******************************************
void IntQueue::clear(void)
{
front = - 1;
rear = - 1;
numItems = 0;
}
30
//Program demonstrating the IntQueue class
void main(void)
{
IntQueue iQueue(5);
cout << "Enqueuing 5 items...n";
// Enqueue 5 items.
for (int x = 0; x < 5; x++)
iQueue.enqueue(x);
// Attempt to enqueue a 6th item.
cout << "Now attempting to enqueue again...n";
iQueue.enqueue(5);
// Deqeue and retrieve all items in the queue
cout << "The values in the queue were:n";
while (!iQueue.isEmpty())
{
int value;
iQueue.dequeue(value);
cout << value << endl;
}
}
31
Program Output
Enqueuing 5 items...
Now attempting to enqueue again...
The queue is full.
The values in the queue were:
0
1
2
3
4
32
Another implementation of Queues using
Arrays
class CQueue
{
int Data*,QueueSize,Front,Rear;
public:
CQueue(int size);
~CQueue(int size);
bool IsFull();
bool IsEmpty();
void Enqueue(int num);
int Dequeue();
void MakeNull;
};
33
CQueue::CQueue(int size)
{
Front=Rear=-1;
Data=new int[size];
}
void CQueue ::Enqueue(int num);
{
if (IsFull()) { cout<<“Overflow” return; }
if (IsEmpty() Rear=Front=0;
else Rear=(Rear+1) % QueueSize;
Data[Rear]=num;
}
34
int CQueue ::Dequeue(int num);
{
if (IsEmpty()) { cout<<“Underflow”; return; }
int ReturnValue=Data[Front];
if (Front==Rear) //only one element in the queue
Front=Rear=-1;
else
Front=(Front+1) % QueueSize;
return ReturnValue;
}
35
bool CQueue::IsEmpty()
{
if (Front==-1) return true;
else return false;
}
bool CQueue::IsFull()
{
If (((Rear+1)%QueueSize)==Front)
return true;
else return false;
}

More Related Content

PDF
05 queues
PPTX
Data Structures - Lecture 6 [queues]
PPTX
U3.stack queue
PPT
Standard Template Library (STL) in Object Oriented Programming
PPT
computer notes - Data Structures - 9
PPT
Computer notes data structures - 9
PPT
Stack queue
PPTX
Queue Implementation Using Array & Linked List
05 queues
Data Structures - Lecture 6 [queues]
U3.stack queue
Standard Template Library (STL) in Object Oriented Programming
computer notes - Data Structures - 9
Computer notes data structures - 9
Stack queue
Queue Implementation Using Array & Linked List

What's hot (20)

PPT
Dynamic memory allocation
TXT
Operator overloading (binary)
PDF
Csharp_Chap13
PPT
Queue in Data Structure
PPTX
Intoduction to dynamic memory allocation
PPT
Queue Data Structure
PPT
Stacks and queue
PPTX
Queue oop
PDF
13. dynamic allocation
PPT
Stack and queue
PPT
PPT
Queue implementation
PPTX
Pointers and Dynamic Memory Allocation
PPTX
Queue Data Structure (w/ php egs)
PPTX
queue & its applications
PDF
OpenXR 1.0 Reference Guide
PPT
Queue data structure
PPTX
Queues presentation
PPTX
Queues in C++
Dynamic memory allocation
Operator overloading (binary)
Csharp_Chap13
Queue in Data Structure
Intoduction to dynamic memory allocation
Queue Data Structure
Stacks and queue
Queue oop
13. dynamic allocation
Stack and queue
Queue implementation
Pointers and Dynamic Memory Allocation
Queue Data Structure (w/ php egs)
queue & its applications
OpenXR 1.0 Reference Guide
Queue data structure
Queues presentation
Queues in C++
Ad

Similar to Algo>Queues (20)

PPT
Lec-07 Queues.ppt queues introduction to queue
PPTX
The presention is about the queue data structure
PPT
Lec-12, 13 Quees In Queue IntQueue(int s)
PPT
Lec-12, 13 Queues - IntQueue IntQueue(int s) //constructor
PPT
Function enqueue inserts the value in num
PPT
STACKS AND QUEUES in Data Structures.ppt
DOCX
PDF
StackInterface An interface for the ADT stack. Do not modif.pdf
PDF
Using NetBeansImplement a queue named QueueLL using a Linked List .pdf
PDF
CHAPTER 4 - DATA STRUCTURES QUEUES CHAPTER
PPTX
Unit 4 queue
PPT
queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbb
PPTX
DS ppt1.pptx.c programing. Engineering. Data structure
PPTX
Stack.pptx
PPT
The Stack in data structures .ppt
PPTX
Queue(lecture8).pptx
PPTX
Data Structures and Agorithm: DS 09 Queue.pptx
PPT
2 b queues
PDF
in this assignment you are asked to write a simple driver program an.pdf
PPTX
Fundamentals of Data Structure and Queues
Lec-07 Queues.ppt queues introduction to queue
The presention is about the queue data structure
Lec-12, 13 Quees In Queue IntQueue(int s)
Lec-12, 13 Queues - IntQueue IntQueue(int s) //constructor
Function enqueue inserts the value in num
STACKS AND QUEUES in Data Structures.ppt
StackInterface An interface for the ADT stack. Do not modif.pdf
Using NetBeansImplement a queue named QueueLL using a Linked List .pdf
CHAPTER 4 - DATA STRUCTURES QUEUES CHAPTER
Unit 4 queue
queuesArrays.ppt bbbbbbbbbbbbbbbbbbbbbbbbbb
DS ppt1.pptx.c programing. Engineering. Data structure
Stack.pptx
The Stack in data structures .ppt
Queue(lecture8).pptx
Data Structures and Agorithm: DS 09 Queue.pptx
2 b queues
in this assignment you are asked to write a simple driver program an.pdf
Fundamentals of Data Structure and Queues
Ad

More from Ain-ul-Moiz Khawaja (17)

PPT
Application of Stacks
PPT
Algo>Stacks
PPT
Analysis of Algorithum
PPT
Algo>ADT list & linked list
PPT
Algo>Arrays
PPT
Algo>Abstract data type
PPT
Algorithum Analysis
PPT
Sorting algorithums > Data Structures & Algorithums
PPT
Sorting algos > Data Structures & Algorithums
PPT
Huffman > Data Structures & Algorithums
PPT
Graphs > Discrete structures , Data Structures & Algorithums
PPT
Data Structures & Algorithms
PPTX
PPTX
Attribution Theories
PPTX
Attribution Theory
PPTX
Absenteeism
PPT
HRM Employee Turnover
Application of Stacks
Algo>Stacks
Analysis of Algorithum
Algo>ADT list & linked list
Algo>Arrays
Algo>Abstract data type
Algorithum Analysis
Sorting algorithums > Data Structures & Algorithums
Sorting algos > Data Structures & Algorithums
Huffman > Data Structures & Algorithums
Graphs > Discrete structures , Data Structures & Algorithums
Data Structures & Algorithms
Attribution Theories
Attribution Theory
Absenteeism
HRM Employee Turnover

Recently uploaded (20)

PDF
RMMM.pdf make it easy to upload and study
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PPTX
Introduction-to-Literarature-and-Literary-Studies-week-Prelim-coverage.pptx
PPTX
Onco Emergencies - Spinal cord compression Superior vena cava syndrome Febr...
PPTX
Radiologic_Anatomy_of_the_Brachial_plexus [final].pptx
PPTX
UNIT III MENTAL HEALTH NURSING ASSESSMENT
PDF
Paper A Mock Exam 9_ Attempt review.pdf.
PDF
advance database management system book.pdf
PDF
Chinmaya Tiranga quiz Grand Finale.pdf
PPTX
Digestion and Absorption of Carbohydrates, Proteina and Fats
PDF
GENETICS IN BIOLOGY IN SECONDARY LEVEL FORM 3
PDF
IGGE1 Understanding the Self1234567891011
DOC
Soft-furnishing-By-Architect-A.F.M.Mohiuddin-Akhand.doc
PPTX
A powerpoint presentation on the Revised K-10 Science Shaping Paper
PDF
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
PPTX
CHAPTER IV. MAN AND BIOSPHERE AND ITS TOTALITY.pptx
PDF
Hazard Identification & Risk Assessment .pdf
PDF
1_English_Language_Set_2.pdf probationary
PDF
medical_surgical_nursing_10th_edition_ignatavicius_TEST_BANK_pdf.pdf
PDF
Weekly quiz Compilation Jan -July 25.pdf
RMMM.pdf make it easy to upload and study
Final Presentation General Medicine 03-08-2024.pptx
Introduction-to-Literarature-and-Literary-Studies-week-Prelim-coverage.pptx
Onco Emergencies - Spinal cord compression Superior vena cava syndrome Febr...
Radiologic_Anatomy_of_the_Brachial_plexus [final].pptx
UNIT III MENTAL HEALTH NURSING ASSESSMENT
Paper A Mock Exam 9_ Attempt review.pdf.
advance database management system book.pdf
Chinmaya Tiranga quiz Grand Finale.pdf
Digestion and Absorption of Carbohydrates, Proteina and Fats
GENETICS IN BIOLOGY IN SECONDARY LEVEL FORM 3
IGGE1 Understanding the Self1234567891011
Soft-furnishing-By-Architect-A.F.M.Mohiuddin-Akhand.doc
A powerpoint presentation on the Revised K-10 Science Shaping Paper
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
CHAPTER IV. MAN AND BIOSPHERE AND ITS TOTALITY.pptx
Hazard Identification & Risk Assessment .pdf
1_English_Language_Set_2.pdf probationary
medical_surgical_nursing_10th_edition_ignatavicius_TEST_BANK_pdf.pdf
Weekly quiz Compilation Jan -July 25.pdf

Algo>Queues

  • 2. 2 Queues “A Queue is a special kind of list, where items are inserted at one end (the rear) And deleted at the other end (the front)” Other Name:  First In First Out (FIFO) Difference from Stack: Insertion go at the end of the list, rather than the beginning of the list.
  • 3. 3 Common Operations on Queues (Queue ADT) 1. MAKENULL(Q): Makes Queue Q be an empty list. 2. FRONT(Q): Returns the first element on Queue Q. 3. ENQUEUE(x,Q): Inserts element x at the end of Queue Q. 4. DEQUEUE(Q): Deletes the first element of Q. 5. EMPTY(Q): Returns true if and only if Q is an empty queue. Example: Line of customers in a bank
  • 4. 4 Applications of Queues Operating system multi-user/multitasking environments, where several users or task may be requesting the same resource simultaneously. Communication Software queues to hold information received over networks and dial up connections. (Information can be transmitted faster than it can be processed, so is placed in a queue waiting to be processed) Some other?
  • 5. 5 Implementation Static Queue is implemented by an array, and size of queue remains fix Dynamic A queue can be implemented as a linked list, and expand or shrink with each enqueue or dequeue operation.
  • 6. 6
  • 7. 7 A pointer Implementation of Queues Keep two pointers:  FRONT: A pointer to the first element of the queue.  REAR: A pointer to the last element of the queue. x y .zFront Rear
  • 8. 8 A pointer Implementation of Queues Q.front Q.Rear MAKENULL(Q) Q.front Q.Rear ENQUEUE(x,Q) .x NULL
  • 10. 10 A class for Dynamic Queue implementation class DynIntQueue { private: struct QueueNode { int value; QueueNode *next; }; QueueNode *front; QueueNode *rear; int numItems; public: DynIntQueue(void); ~DynIntQueue(void); void enqueue(int); int dequeue(void); bool isEmpty(void); void makeNull(void); };
  • 11. 11 Implemenaton //************************ // Constructor * //************************ DynIntQueue::DynIntQueue(void) { front = NULL; rear = NULL; numItems = 0; } //************************ // Destructor * //************************ DynIntQueue::~DynIntQueue(void) { makeNull(); }
  • 12. 12 //******************************************** // Function enqueue inserts the value in num * // at the rear of the queue. * //******************************************** void DynIntQueue::enqueue(int num) { QueueNode *newNode; newNode = new QueueNode; newNode->value = num; newNode->next = NULL; if (isEmpty()) { front = newNode; rear = newNode; } else { rear->next = newNode; rear = newNode; } numItems++; }
  • 13. 13 //********************************************** // Function dequeue removes the value at the * // front of the queue, and copies it into num. * //********************************************** int DynIntQueue::dequeue(void) { QueueNode *temp; int num; if (isEmpty()) cout << "The queue is empty.n"; else { num = front->value; temp = front->next; delete front; front = temp; numItems--; } return num; }
  • 14. 14 //********************************************* // Function isEmpty returns true if the queue * // is empty, and false otherwise. * //********************************************* bool DynIntQueue::isEmpty(void) { if (numItems) return false; else return true; }
  • 15. 15 //******************************************** // Function makeNull dequeues all the elements * // in the queue. * //******************************************** void DynIntQueue::makeNull(void) { while(!isEmpty()) dequeue(); }
  • 16. 16 Program // This program demonstrates the DynIntQeue class void main(void) { DynIntQueue iQueue; cout << "Enqueuing 5 items...n"; // Enqueue 5 items. for (int x = 0; x < 5; x++) iQueue.enqueue(x); // Deqeue and retrieve all items in the queue cout << "The values in the queue were:n"; while (!iQueue.isEmpty()) { int value; value =iQueue.dequeue(); cout << value << endl; } }
  • 17. 17 Program Ouput Enqueuing 5 items... The values in the queue were: 0 1 2 3 4
  • 18. 18 Array Implementation First Element Last Element maxlength Front Second Element. . Rear When queue is empty both front and rear are set to -1 While enqueueing increment rear by 1, and while dequeueing increment front by 1 When there is only one value in the Queue, both rear and front have same index Can we implement Queue by using only one index variable Front or Rear?? YES, by moving elements of array to neighboring locations like we did in STACK but this is in- efficient Why it is inefficient?
  • 19. 19 Array Implementation 5 4 6 7 8 7 6 0 1 2 3 4 5 6 7 8 Front=0 Rear=6 8 7 6 0 1 2 3 4 5 6 7 8 Front=4 Rear=6 7 6 12 67 0 1 2 3 4 5 6 7 8 Front=5 Rear=8 How can we insert more elements? Rear index can not move beyond the last element….
  • 20. 20 Solution: Using circular queue Allow rear to wrap around the array. if(rear == queueSize-1) rear = 0; else rear++; Or use module arithmetic rear = (rear + 1) % queueSize;
  • 21. 21 7 6 12 67 0 1 2 3 4 5 6 7 8 Front=5 Rear=8 Enqueue 39 Rear=(Rear+1) mod Queue Size = (8+1) mod 9 = 0 39 7 6 12 67 0 1 2 3 4 5 6 7 8 Front=5 Rear=0
  • 22. 22 How to determine empty and full Queues? It is some tricky Number of approaches A counter indicating number of values in the queue can be used (We will use this approach) We will see another approach as well at the end
  • 23. 23 Implementation class IntQueue { private: int *queueArray; int queueSize; int front; int rear; int numItems; public: IntQueue(int); ~IntQueue(void); void enqueue(int); int dequeue(void); bool isEmpty(void); bool isFull(void); void clear(void); }; Note, the member function clear, which clears the queue by resetting the front and rear indices, and setting the numItems to 0.
  • 24. 24 IntQueue::IntQueue(int s) //constructor { queueArray = new int[s]; queueSize = s; front = -1; rear = -1; numItems = 0; } IntQueue::~IntQueue(void) //destructor { delete [] queueArray; }
  • 25. 25 //******************************************** // Function enqueue inserts the value in num * // at the rear of the queue. * //******************************************** void IntQueue::enqueue(int num) { if (isFull()) cout << "The queue is full.n"; else { // Calculate the new rear position rear = (rear + 1) % queueSize; // Insert new item queueArray[rear] = num; // Update item count numItems++; } }
  • 26. 26 //********************************************* // Function dequeue removes the value at the * // front of the queue, and copies t into num. * //********************************************* int IntQueue::dequeue(void) { if (isEmpty()) cout << "The queue is empty.n"; else { // Move front front = (front + 1) % queueSize; // Retrieve the front item int num = queueArray[front]; // Update item count numItems--; } return num; }
  • 27. 27 //********************************************* // Function isEmpty returns true if the queue * // is empty, and false otherwise. * //********************************************* bool IntQueue::isEmpty(void) { if (numItems) return false; else return true; }
  • 28. 28 //******************************************** // Function isFull returns true if the queue * // is full, and false otherwise. * //******************************************** bool IntQueue::isFull(void) { if (numItems < queueSize) return false; else return true; }
  • 29. 29 //******************************************* // Function clear resets the front and rear * // indices, and sets numItems to 0. * //******************************************* void IntQueue::clear(void) { front = - 1; rear = - 1; numItems = 0; }
  • 30. 30 //Program demonstrating the IntQueue class void main(void) { IntQueue iQueue(5); cout << "Enqueuing 5 items...n"; // Enqueue 5 items. for (int x = 0; x < 5; x++) iQueue.enqueue(x); // Attempt to enqueue a 6th item. cout << "Now attempting to enqueue again...n"; iQueue.enqueue(5); // Deqeue and retrieve all items in the queue cout << "The values in the queue were:n"; while (!iQueue.isEmpty()) { int value; iQueue.dequeue(value); cout << value << endl; } }
  • 31. 31 Program Output Enqueuing 5 items... Now attempting to enqueue again... The queue is full. The values in the queue were: 0 1 2 3 4
  • 32. 32 Another implementation of Queues using Arrays class CQueue { int Data*,QueueSize,Front,Rear; public: CQueue(int size); ~CQueue(int size); bool IsFull(); bool IsEmpty(); void Enqueue(int num); int Dequeue(); void MakeNull; };
  • 33. 33 CQueue::CQueue(int size) { Front=Rear=-1; Data=new int[size]; } void CQueue ::Enqueue(int num); { if (IsFull()) { cout<<“Overflow” return; } if (IsEmpty() Rear=Front=0; else Rear=(Rear+1) % QueueSize; Data[Rear]=num; }
  • 34. 34 int CQueue ::Dequeue(int num); { if (IsEmpty()) { cout<<“Underflow”; return; } int ReturnValue=Data[Front]; if (Front==Rear) //only one element in the queue Front=Rear=-1; else Front=(Front+1) % QueueSize; return ReturnValue; }
  • 35. 35 bool CQueue::IsEmpty() { if (Front==-1) return true; else return false; } bool CQueue::IsFull() { If (((Rear+1)%QueueSize)==Front) return true; else return false; }