Circular Queue in C
A Circular Queue is a special type of linear queue in which the last position connects back to the first position, forming a circle.
It solves the problem of unused spaces in a regular queue.
Why Circular Queue?
In a normal queue, once the rear reaches the end of the array, no more insertions are possible even if front has moved ahead.
This wastes memory.
Circular Queue reuses empty spaces by connecting the end of the queue back to the beginning.
Circular Queue Structure
Index: 0 1 2 3 4 Queue: [A] [B] [C] [ ] [ ] front = 0 rear = 2 When rear moves further → goes to index 0 (rear + 1) % size
Operations in Circular Queue
- Enqueue – Insert item
- Dequeue – Remove item
- Peek – View front element
- IsFull() – Check queue overflow
- IsEmpty() – Check queue underflow
Conditions
Queue FULL condition
(rear + 1) % size == front
Queue EMPTY condition
front == -1
Circular Queue Implementation (Full Code)
#include <stdio.h>
#define SIZE 5
int queue[SIZE];
int front = -1, rear = -1;
int isFull(){
return (rear + 1) % SIZE == front;
}
int isEmpty(){
return front == -1;
}
void enqueue(int value){
if(isFull()){
printf("Queue is Full!\\n");
return;
}
if(front == -1)
front = rear = 0;
else
rear = (rear + 1) % SIZE;
queue[rear] = value;
printf("%d inserted\\n", value);
}
void dequeue(){
if(isEmpty()){
printf("Queue is Empty!\\n");
return;
}
printf("%d removed\\n", queue[front]);
if(front == rear)
front = rear = -1;
else
front = (front + 1) % SIZE;
}
void display(){
if(isEmpty()){
printf("Queue is Empty!\\n");
return;
}
int i = front;
printf("Queue: ");
while(i != rear){
printf("%d ", queue[i]);
i = (i + 1) % SIZE;
}
printf("%d\\n", queue[rear]);
}
int main(){
enqueue(10);
enqueue(20);
enqueue(30);
enqueue(40);
dequeue();
enqueue(50);
enqueue(60);
display();
return 0;
}
5 Examples — Circular Queue
Example 1 — Simple Enqueue and Display
enqueue(10); enqueue(20); enqueue(30); display();
Example 2 — Full Queue Test
enqueue(1); enqueue(2); enqueue(3); enqueue(4); enqueue(5); enqueue(6); // Full
Example 3 — Wrap Around
enqueue(10); enqueue(20); enqueue(30); dequeue(); enqueue(40); // Rear wraps to start display();
Example 4 — Empty Queue Test
dequeue(); dequeue(); dequeue(); dequeue(); // Empty
Example 5 — Use Peek (Front Element)
printf("Front element: %d", queue[front]);
Practice Questions
- Explain how a circular queue solves the problem of wasted space.
- Write enqueue and dequeue logic using modulo operation.
- Explain full and empty conditions.
- Draw diagram for circular queue after 7 operations.
- Implement menu-driven program for circular queue.