Algorithmscircular queue

Circular Queue — Ring Buffer

TT
Testlaa Team
May 14, 20261 min read

Indices wrap with modulo; distinguish full vs empty when head == tail using a size counter or wasted slot.

Try this in Python

class CircularQueue:
    def __init__(self, k: int) -> None:
        self.k = k
        self.buf = [0] * k
        self.head = 0
        self.size = 0

    def en_queue(self, v: int) -> bool:
        if self.size == self.k:
            return False
        self.buf[(self.head + self.size) % self.k] = v
        self.size += 1
        return True

    def de_queue(self) -> bool:
        if self.size == 0:
            return False
        self.head = (self.head + 1) % self.k
        self.size -= 1
        return True


cq = CircularQueue(3)
print(cq.en_queue(1), cq.en_queue(2), cq.de_queue(), cq.en_queue(3))

Key takeaways

  • Modulo ties physical end to logical continuation.
  • Size simplifies full checks versus LeetCode-style rear pointer tricks.
  • Hardware buffers and kernels use the same idea.

Tags:

Stacks & queuesPythonStudents