Circular Queue allows efficient use of space by reusing empty spots left by removed elements. In a circular queue, you have two pointers: one for the front (where you remove items) and one for the rear (where you add items). When the rear reaches the end, it circles back to the start, making the queue a continuous loop. This approach helps in situations where you have a fixed amount of memory and need to handle a continuous flow of data.
function enqueue(value):
if front == rear and size == n:
alert "Queue is full."
else:
queue[rear] = value
rear = (rear + 1) % n
size = size + 1
function dequeue():
if front == rear and size == 0:
alert "Queue is empty."
else:
value = queue[front]
front = (front + 1) % n
size = size - 1
In a linear array queue, dequeuing elements leaves empty spaces at the front that cannot be reused without shifting elements. A Circular Queue wraps the rear and front pointers around using modulo arithmetic (index + 1) % n, utilizing memory efficiently.
Without a counter variable, both empty and full conditions make front == rear. Two solutions: maintain an explicit counter, or keep one array slot intentionally empty so (rear + 1) % n == front indicates full, while front == rear indicates empty.
Used in CPU hardware interrupt queues, network socket packet buffers, keyboard buffer inputs, and real-time audio sample streaming where data streams continuously between producer and consumer threads.
Sign in to join the discussion
Hand-picked resources to deepen your understanding
© 2025 See Algorithms. Code licensed under MIT, content under CC BY-NC 4.0