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

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

  1. Explain how a circular queue solves the problem of wasted space.
  2. Write enqueue and dequeue logic using modulo operation.
  3. Explain full and empty conditions.
  4. Draw diagram for circular queue after 7 operations.
  5. Implement menu-driven program for circular queue.