ccompiler.inOnline C Compiler & Docs
C Example Code2026-03-252 min read

Implement a Circular Queue in C using modulo arithmetic to prevent memory wastage. Complete code for circular enqueue, dequeue, and display.

Why Use a Circular Queue?

In a standard linear array queue, dequeuing elements leaves empty spaces at the front that cannot be reused once rear reaches the end. A Circular Queue solves this by wrapping indices around using modulo arithmetic:

text (ISO Standard)
nextIndex = (currentIndex + 1) % CAPACITY

Complete C Implementation

c (ISO Standard)
#include <stdio.h>
#include <stdbool.h>

#define SIZE 5

typedef struct {
    int items[SIZE];
    int front;
    int rear;
} CircularQueue;

void initQueue(CircularQueue *q) {
    q->front = -1;
    q->rear = -1;
}

bool isFull(const CircularQueue *q) {
    return (q->front == (q->rear + 1) % SIZE);
}

bool isEmpty(const CircularQueue *q) {
    return (q->front == -1);
}

void enqueue(CircularQueue *q, int value) {
    if (isFull(q)) {
        printf("Circular Queue is Full! Cannot insert %d.\n", value);
        return;
    }
    if (isEmpty(q)) {
        q->front = 0;
    }
    q->rear = (q->rear + 1) % SIZE;
    q->items[q->rear] = value;
    printf("Enqueued %d at index %d.\n", value, q->rear);
}

int dequeue(CircularQueue *q) {
    if (isEmpty(q)) {
        printf("Circular Queue is Empty!\n");
        return -1;
    }
    int data = q->items[q->front];
    if (q->front == q->rear) {
        /* Only one element was present */
        q->front = q->rear = -1;
    } else {
        q->front = (q->front + 1) % SIZE;
    }
    return data;
}

int main() {
    CircularQueue cq;
    initQueue(&cq);

    enqueue(&cq, 10);
    enqueue(&cq, 20);
    enqueue(&cq, 30);
    enqueue(&cq, 40);

    printf("Dequeued: %d\n", dequeue(&cq));
    printf("Dequeued: %d\n", dequeue(&cq));

    enqueue(&cq, 50);
    enqueue(&cq, 60);

    return 0;
}

Sample Output

text (ISO Standard)
Enqueued 10 at index 0.
Enqueued 20 at index 1.
Enqueued 30 at index 2.
Enqueued 40 at index 3.
Dequeued: 10
Dequeued: 20
Enqueued 50 at index 4.
Enqueued 60 at index 0.

Complexity Analysis

  • Enqueue / Dequeue: O(1) constant time.
  • Space Efficiency: $100%$ capacity utilization without shifting elements.

Related C Examples & Tutorials