Design Circular Queue

IF
AlgoAxiomStaff Engineers
JSTS
Medium20 mins

Design a circular queue (ring buffer) — a linear data structure where the last element connects back to the first, forming a circle.

Implement a function that processes an array of operations and an array of arguments:

  • "MyCircularQueue" — Initializes the queue with a capacity of k.
  • "enQueue" — Inserts value into the circular queue. Returns true if successful, false if the queue is full.
  • "deQueue" — Deletes an element from the front. Returns true if successful, false if the queue is empty.
  • "Front" — Returns the front element, or -1 if empty.
  • "Rear" — Returns the last element, or -1 if empty.
  • "isEmpty" — Returns true if the queue is empty.
  • "isFull" — Returns true if the queue is full.

Examples

Example 1:

Input: operations = ["MyCircularQueue","enQueue","enQueue","enQueue","enQueue","Rear","isFull","deQueue","enQueue","Rear"], args = [[3],[1],[2],[3],[4],[],[],[],[4],[]]

Output: [null,true,true,true,false,3,true,true,true,4]

Explanation: Queue capacity is 3. After enqueueing 1, 2, 3 the queue is full. enQueue(4) fails. Rear is 3. deQueue removes 1. enQueue(4) succeeds. Rear is now 4.

Example 2:

Input: operations = ["MyCircularQueue","enQueue","deQueue","isEmpty","enQueue","Front","Rear"], args = [[2],[5],[],[],[10],[],[]]

Output: [null,true,true,true,true,10,10]

Explanation: Enqueue 5, dequeue it (queue empty). Enqueue 10, Front and Rear both return 10.

Constraints

  • 1 <= k <= 1000
  • 0 <= value <= 1000
  • At most 3000 calls will be made to the operations
Source: Custom Data Structures pattern — AlgoAxiom
JavaScript
Test Case 1
root = [1, 2, 3]
Test Case 2
root = [1, 2, 3, 4, 5]
Idle