Bird
Raised Fist0
DSA Pythonprogramming~20 mins

Circular Queue Implementation Using Array in DSA Python - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Circular Queue Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Circular Queue Enqueue and Dequeue Operations
What is the printed state of the circular queue after performing the following operations?

Initialize queue with size 5.
Enqueue 10, 20, 30.
Dequeue one element.
Enqueue 40, 50.
Dequeue two elements.
Enqueue 60, 70.

Print the queue elements from front to rear.
DSA Python
class CircularQueue:
    def __init__(self, size):
        self.size = size
        self.queue = [None] * size
        self.front = -1
        self.rear = -1

    def enqueue(self, data):
        if (self.rear + 1) % self.size == self.front:
            return "Queue is Full"
        elif self.front == -1:
            self.front = 0
            self.rear = 0
            self.queue[self.rear] = data
        else:
            self.rear = (self.rear + 1) % self.size
            self.queue[self.rear] = data

    def dequeue(self):
        if self.front == -1:
            return "Queue is Empty"
        data = self.queue[self.front]
        if self.front == self.rear:
            self.front = -1
            self.rear = -1
        else:
            self.front = (self.front + 1) % self.size
        return data

    def display(self):
        if self.front == -1:
            return []
        elements = []
        i = self.front
        while True:
            elements.append(self.queue[i])
            if i == self.rear:
                break
            i = (i + 1) % self.size
        return elements

cq = CircularQueue(5)
cq.enqueue(10)
cq.enqueue(20)
cq.enqueue(30)
cq.dequeue()
cq.enqueue(40)
cq.enqueue(50)
cq.dequeue()
cq.dequeue()
cq.enqueue(60)
cq.enqueue(70)
print(cq.display())
A[20, 30, 40, 50]
B[30, 40, 50, 60, 70]
C[40, 50, 60, 70]
D[10, 20, 30, 40]
Attempts:
2 left
💡 Hint
Remember that the circular queue wraps around when rear reaches the end of the array.
🧠 Conceptual
intermediate
1:30remaining
Understanding Circular Queue Full Condition
In a circular queue implemented using an array of size 6, which condition correctly checks if the queue is full?
Arear == size - 1
Bfront == 0 and rear == size - 1
Cfront == rear
D(rear + 1) % size == front
Attempts:
2 left
💡 Hint
Think about how the rear wraps around to the front in a circular queue.
🔧 Debug
advanced
1:30remaining
Identify the Bug in Circular Queue Dequeue Method
What error will occur when running this dequeue method if the queue is empty?
DSA Python
def dequeue(self):
    if self.front == -1:
        return "Queue is Empty"
    data = self.queue[self.front]
    if self.front == self.rear:
        self.front = -1
        self.rear = -1
    else:
        self.front = (self.front + 1) % self.size
    return data

cq = CircularQueue(3)
cq.dequeue()
AReturns 'Queue is Empty' string
BIndexError: list index out of range
CTypeError: unsupported operand type(s)
DAttributeError: 'CircularQueue' object has no attribute 'queue'
Attempts:
2 left
💡 Hint
Check what happens when front is -1 and dequeue is called.
❓ Predict Output
advanced
2:00remaining
Result of Circular Queue After Wrap-Around Enqueue
Given a circular queue of size 4, what is the queue content after these operations?

Enqueue 1, 2, 3.
Dequeue one element.
Enqueue 4.
Enqueue 5.

Print the queue elements from front to rear.
DSA Python
cq = CircularQueue(4)
cq.enqueue(1)
cq.enqueue(2)
cq.enqueue(3)
cq.dequeue()
cq.enqueue(4)
cq.enqueue(5)
print(cq.display())
A[2, 3, 4, 5]
B[1, 2, 3, 4]
C[3, 4, 5]
D[2, 3, 4]
Attempts:
2 left
💡 Hint
Remember the queue size is 4 and it wraps around when full.
🚀 Application
expert
1:30remaining
Maximum Number of Elements in Circular Queue
If a circular queue is implemented using an array of size N, what is the maximum number of elements it can hold without resizing?
AN
BN - 1
CN + 1
DN // 2
Attempts:
2 left
💡 Hint
One slot is kept empty to distinguish full and empty states.

Practice

(1/5)
1. What is the main advantage of using a circular queue over a simple linear queue when implemented using an array?
easy
A. It efficiently uses the available space by reusing freed slots.
B. It allows storing different data types in the same queue.
C. It automatically sorts the elements in the queue.
D. It eliminates the need for front and rear pointers.

Solution

  1. Step 1: Understand linear queue limitation

    In a linear queue using an array, once rear reaches the end, no more elements can be added even if there is space at the front.
  2. Step 2: Circular queue reuses space

    Circular queue connects the end of the array back to the front, allowing reuse of freed slots and efficient space usage.
  3. Final Answer:

    It efficiently uses the available space by reusing freed slots. -> Option A
  4. Quick Check:

    Space reuse = Advantage [OK]
Hint: Circular queue reuses space unlike linear queue [OK]
Common Mistakes:
  • Thinking circular queue sorts elements
  • Believing circular queue removes need for pointers
  • Assuming it stores multiple data types automatically
2. Which of the following is the correct way to check if a circular queue is full when using an array of size max_size with front and rear pointers?
easy
A. if rear == max_size - 1
B. if rear == front
C. if front == -1
D. if (rear + 1) % max_size == front

Solution

  1. Step 1: Understand full condition in circular queue

    The queue is full when the next position of rear (circularly) is front.
  2. Step 2: Use modulo for circular increment

    Using modulo operator, (rear + 1) % max_size gives the next position circularly.
  3. Final Answer:

    if (rear + 1) % max_size == front -> Option D
  4. Quick Check:

    Full condition = (rear + 1) % max_size == front [OK]
Hint: Full when next rear equals front using modulo [OK]
Common Mistakes:
  • Checking rear == front means full (actually empty)
  • Using rear == max_size - 1 ignores circular wrap
  • Checking front == -1 means empty, not full
3. Consider this circular queue code snippet with max_size = 5:
front = 0
rear = 3
queue = [10, 20, 30, 40, None]

# Enqueue operation
rear = (rear + 1) % 5
queue[rear] = 50

# Dequeue operation
front = (front + 1) % 5

print(queue)

What will be the printed output?
medium
A. [10, 20, 30, 40, 50] with front=1 and rear=4
B. [10, 20, 30, 40, None]
C. [10, 20, 30, 40, 50]
D. [10, 20, 30, 40, 50] with front=0 and rear=4

Solution

  1. Step 1: Perform enqueue operation

    rear moves from 3 to (3+1)%5 = 4; queue[4] = 50; queue becomes [10, 20, 30, 40, 50]
  2. Step 2: Perform dequeue operation

    front moves from 0 to (0+1)%5 = 1; front=1, rear=4
  3. Final Answer:

    [10, 20, 30, 40, 50] with front=1 and rear=4 -> Option A
  4. Quick Check:

    Enqueue rear=4, Dequeue front=1 [OK]
Hint: Track front and rear updates carefully after enqueue/dequeue [OK]
Common Mistakes:
  • Ignoring front and rear pointer updates
  • Assuming queue content changes on dequeue
  • Confusing front and rear positions
4. The following code snippet for dequeue operation in a circular queue has a bug:
def dequeue(queue, front, rear, max_size):
    if front == -1:
        return None, front, rear  # Queue empty
    data = queue[front]
    if front == rear:
        front = rear = -1
    else:
        front = (front + 1) % max_size
    return data, front, rear

# Initial state
queue = [10, 20, 30, 40, 50]
front = 0
rear = 4

# Dequeue call
value, front, rear = dequeue(queue, front, rear, 5)
print(value, front, rear)

What is the bug in this code?
medium
A. The condition to check empty queue should be rear == -1, not front == -1.
B. The function does not update the queue after dequeue.
C. The function does not handle the case when queue is full.
D. The function incorrectly resets front and rear to -1 when queue becomes empty.

Solution

  1. Step 1: Check queue update after dequeue

    The dequeue operation removes the element logically by moving front, but the queue array still holds the old value.
  2. Step 2: Identify missing update

    To avoid stale data, the dequeued position should be cleared or updated (e.g., set to None) after dequeue.
  3. Final Answer:

    The function does not update the queue after dequeue. -> Option B
  4. Quick Check:

    Queue array update after dequeue [OK]
Hint: Dequeue should clear or update the dequeued slot [OK]
Common Mistakes:
  • Checking only front for empty queue
  • Not resetting pointers correctly after last dequeue
  • Ignoring queue full condition in dequeue
5. You have a circular queue of size 6 (indices 0 to 5). Initially, front = 4 and rear = 2. The queue array is:
[70, 80, 90, None, 40, 50]

Which of the following sequences of operations will correctly enqueue 100 and dequeue two elements, updating front and rear properly?
hard
A. Enqueue: rear = (rear + 1) % 6; queue[rear] = 100; Dequeue: front = (front + 1) % 6
B. Enqueue: rear = (rear + 2) % 6; queue[rear] = 100; Dequeue: front = (front + 1) % 6; front = (front + 1) % 6
C. Enqueue: rear = (rear + 1) % 6; queue[rear] = 100; Dequeue: front = (front + 1) % 6; front = (front + 1) % 6
D. Enqueue: rear = (rear + 1) % 6; queue[rear] = 100; Dequeue: front = (front + 2) % 6

Solution

  1. Step 1: Enqueue operation

    rear = (2 + 1) % 6 = 3; queue[3] = 100; queue becomes [70, 80, 90, 100, 40, 50]
  2. Step 2: Dequeue two elements

    front moves twice: front = (4 + 1) % 6 = 5, then front = (5 + 1) % 6 = 0
  3. Final Answer:

    Enqueue: rear = (rear + 1) % 6; queue[rear] = 100; Dequeue: front = (front + 1) % 6; front = (front + 1) % 6 -> Option C
  4. Quick Check:

    One enqueue + two dequeues update pointers correctly [OK]
Hint: Increment pointers modulo size for each enqueue/dequeue [OK]
Common Mistakes:
  • Incrementing rear or front by more than 1 at once
  • Not using modulo for circular wrap
  • Dequeueing fewer or more times than asked
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard