Circular Queue: Dept. of Computer Science Faculty of Science and Technology
Circular Queue: Dept. of Computer Science Faculty of Science and Technology
1. Queue
i. Definition
ii. Simulation of Operations
iii. Pseudo code of Circular Queue Implementation
2. Books
3. References
Circular Queue
Definition
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
maxSize = 4 front
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
7 9
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
7 9
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
4 8
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
Then?
7 9
4 8
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
Then?
7 9
4 8
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
4 8
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
7 9
front
4 8
rear
fig 2.1: A Circular Queue
Circular Queue
Definition
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
9 Can we enqueue
7
front an element 2 now? 0 1 2 3 4
Linear Representation 7 9 8 4
4 8
rear rear
fig 2.1: A Circular Queue
Circular Queue
Definition
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
rear 2 9
Enqueue again?
0 1 2 3 4
Linear Representation 2 9 8 4
front 4 8
rear
fig 2.1: A Circular Queue
Circular Queue
Definition
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
2 1
Enqueue again?
0 1 2 3 4
Linear Representation 2 1 8 4
front 4 8
rear
fig 2.1: A Circular Queue
Circular Queue
Definition
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
2 1
Enqueue again?
0 1 2 3 4
Linear Representation 2 1 5 4
front 4 5
rear
rear
fig 2.1: A Circular Queue
Circular Queue
Definition
Unlike a Linear Queue, a Circular one can reuse an unused memory in the queue by
circling back to it.
front
Queue[4],MaxSize=4; 0 1 2 3 4
Queue
Initialize( ) front=rear=-1
Check IsEmpty
Check IsFull rear
Queue[4],MaxSize=4; 0 1 2 3 4
Queue 3
Initialize( ) front=rear=-1
Check IsEmpty EnQueue( 3 ) front=rear=0;
Check IsFull rear
Queue[4],MaxSize=4; 0 1 2 3 4
Queue 3 6
Initialize( ) front=rear=-1
Check IsEmpty EnQueue( 3 ) front=rear=0;
EnQueue( 6 ) rear = (rear + 1)%MaxSize;
Check IsFull rear
Queue[4],MaxSize=4; 0 1 2 3 4
Queue 3 6 2
Initialize( ) front=rear=-1
Check IsEmpty EnQueue( 3 ) front=rear=0;
EnQueue( 6 ) rear = 1;
Check IsFull rear
EnQueue( 2 ) rear = (rear + 1)%MaxSize;
EnQueue (add element
to back i.e. at the rear)
DeQueue (remove
element from the front)
FrontValue (retrieve
value of element from
front)
ShowQueue (print all
the values of queue
from front to rear)
Circular Queue: Simulation of Operations
front
Queue[4],MaxSize=4; 0 1 2 3 4
Queue 3 6 2
Initialize( ) front=rear=-1
Check IsEmpty EnQueue( 3 ) front=rear=0;
EnQueue( 6 ) rear = 1;
Check IsFull rear
EnQueue( 2 ) rear = 2;
EnQueue (add element DeQueue( ) front = (front+1)%MaxSize;
to back i.e. at the rear)
DeQueue (remove
element from the front)
FrontValue (retrieve
value of element from
front)
ShowQueue (print all
the values of queue
from front to rear)
Circular Queue: Simulation of Operations
front
Queue[4],MaxSize=4; 0 1 2 3 4
Queue 3 6 2
Initialize( ) front=rear=-1
Check IsEmpty EnQueue( 3 ) front=rear=0;
EnQueue( 6 ) rear = 1;
Check IsFull rear
EnQueue( 2 ) rear = 2;
EnQueue (add element DeQueue( ) front = 1;
to back i.e. at the rear) DeQueue( ) front = (front+1)%MaxSize;
DeQueue (remove
element from the front)
FrontValue (retrieve
value of element from
front)
ShowQueue (print all
the values of queue
from front to rear)
Circular Queue: Simulation of Operations
front
Queue[4],MaxSize=4; 0 1 2 3 4
Queue 3 6 2 5
Initialize( ) front=rear=-1
Check IsEmpty EnQueue( 3 ) front=rear=0;
EnQueue( 6 ) rear = 1;
Check IsFull rear
EnQueue( 2 ) rear = 2;
EnQueue (add element DeQueue( ) front = 1;
to back i.e. at the rear) DeQueue( ) front = 2;
EnQueue( 5 ) rear = (rear + 1)%MaxSize;
DeQueue (remove
element from the front)
FrontValue (retrieve
value of element from
front)
ShowQueue (print all
the values of queue
from front to rear)
Circular Queue: Simulation of Operations
front
Queue[4],MaxSize=4; 0 1 2 3 4
Queue 9 6 2 5
Initialize( ) front=rear=-1
Check IsEmpty EnQueue( 3 ) front=rear=0;
EnQueue( 6 ) rear = 1;
Check IsFull rear
EnQueue( 2 ) rear = 2;
EnQueue (add element DeQueue( ) front = 1;
to back i.e. at the rear) DeQueue( ) front = 2;
EnQueue( 5 ) rear = 3;
DeQueue (remove EnQueue( 9 ) rear = (rear + 1)%MaxSize;
element from the front)
FrontValue (retrieve
value of element from
front)
ShowQueue (print all
the values of queue
from front to rear)
Circular Queue: Simulation of Operations
front
Queue[4],MaxSize=4; 0 1 2 3 4
Queue 9 6 2 5
Initialize( ) front=rear=-1
Check IsEmpty EnQueue( 3 ) front=rear=0;
EnQueue( 6 ) rear = 1;
Check IsFull rear
EnQueue( 2 ) rear = 2;
EnQueue (add element DeQueue( ) front = 1;
to back i.e. at the rear) DeQueue( ) front = 2;
EnQueue( 5 ) rear = 3;
DeQueue (remove EnQueue( 9 ) rear = 0;
element from the front) DeQueue( ) front = (front+1)%MaxSize;
FrontValue (retrieve
value of element from
front)
ShowQueue (print all
the values of queue
from front to rear)
Circular Queue: Simulation of Operations
front
Queue[4],MaxSize=4; 0 1 2 3 4
Queue 9 6 2 5
Initialize( ) front=rear=-1
Check IsEmpty EnQueue( 3 ) front=rear=0;
EnQueue( 6 ) rear = 1;
Check IsFull rear
EnQueue( 2 ) rear = 2;
EnQueue (add element DeQueue( ) front = 1;
to back i.e. at the rear) DeQueue( ) front = 2;
EnQueue( 5 ) rear = 3;
DeQueue (remove EnQueue( 9 ) rear = 0;
element from the front) DeQueue( ) front = 3;
DeQueue( ) front = (front+1)%MaxSize;
FrontValue (retrieve
value of element from
front)
ShowQueue (print all
the values of queue
from front to rear)
Circular Queue: Simulation of Operations
front
Queue[4],MaxSize=4; 0 1 2 3 4
Queue 9 6 2 5
Initialize( ) front=rear=-1
Check IsEmpty EnQueue( 3 ) front=rear=0;
EnQueue( 6 ) rear = 1;
Check IsFull rear
EnQueue( 2 ) rear = 2;
EnQueue (add element DeQueue( ) front = 1;
to back i.e. at the rear) DeQueue( ) front = 2;
EnQueue( 5 ) rear = 3;
DeQueue (remove EnQueue( 9 ) rear = 0;
element from the front) DeQueue( ) front = 3;
FrontValue (retrieve DeQueue( ) front = 0;
DeQueue( ) front=rear=-1;
value of element from
front)
ShowQueue (print all
the values of queue
from front to rear)
Circular Queue: Simulation of Operations
front
Queue[4],MaxSize=4; 0 1 2 3 4
Queue 9 6 2 5
Initialize( ) front=rear=-1
Check IsEmpty EnQueue( 3 ) front=rear=0;
EnQueue( 6 ) rear = 1;
Check IsFull rear
EnQueue( 2 ) rear = 2;
EnQueue (add element DeQueue( ) front = 1;
to back i.e. at the rear) DeQueue( ) front = 2;
EnQueue( 5 ) rear = 3;
DeQueue (remove EnQueue( 9 ) rear = 0;
element from the front) DeQueue( ) front = 3;
FrontValue (retrieve DeQueue( ) front = 0;
DeQueue( ) front=rear=-1;
value of element from DeQueue( ) Queue Empty, if ((front==-1) && (rear==-1));
front)
ShowQueue (print all
the values of queue
from front to rear)
Pseudo code of Circular Queue Implementation
isEmpty(){
if ((front==-1) and (rear==-1)):
then return true;
}
isFull(){
if ((numberOfElement == maxSize):
then return true;
}
enqueue(x){
if(queue full): {error: “queue full!”;}
otherwise if(queue is empty): {front=rear=0; insert x in queue[rear];
numberOfElement++; }
otherwise: rear=(rear+1)%maxSize; insert x in queue[rear];
numberOfElement++;
}
Pseudo code of Circular Queue Implementation
dequeue(){
if(queue empty): {error: “queue is empty! dequeue not possible”}
otherwise if (front and rear are equal):
{front=rear=-1;
numberOfElement --;}
otherwise:
{front=(front+1)%maxSize;
numberOfElement--;}
}
frontElement(){
return queue[front];
}
Pseudo code of Circular Queue Implementation
showQueue(){
if (queue is empty)
error: “cannot show queue because it is empty!”;
otherwise:{
j= front;
for: i=0; i<numberOfEllement; i++
output: {queue[j];
j= (j+1) % maxSize;
}
}
Books
1. https://en.wikipedia.org/wiki/Circular_buffer