Bird
Raised Fist0
DSA C++programming~30 mins

Circular Queue Implementation Using Array in DSA C++ - Build from Scratch

Choose your learning style10 modes available
Circular Queue Implementation Using Array
📖 Scenario: You are managing a small ticket counter that can hold only a fixed number of people waiting in line. To efficiently use the space, you want to implement a circular queue using an array.
🎯 Goal: Build a circular queue using an array with fixed size 5. You will add elements, remove elements, and finally display the queue's current state.
📋 What You'll Learn
Create an integer array called queue of size 5
Create integer variables front and rear initialized to -1
Create an integer variable size set to 5
Write a function enqueue to add elements to the queue
Write a function dequeue to remove elements from the queue
Print the queue elements from front to rear in circular order
💡 Why This Matters
🌍 Real World
Circular queues are used in real-world systems like CPU scheduling, buffering data streams, and managing resources in limited space.
💼 Career
Understanding circular queues helps in roles involving system programming, embedded systems, and performance-critical applications.
Progress0 / 4 steps
1
Create the Circular Queue Data Structure
Create an integer array called queue of size 5, and integer variables front and rear both set to -1.
DSA C++
Hint

Use int queue[5]; to create the array and initialize front and rear to -1.

2
Add the Size Variable
Add an integer variable called size and set it to 5 to represent the queue capacity.
DSA C++
Hint

Declare int size = 5; to store the maximum number of elements.

3
Implement Enqueue and Dequeue Functions
Write two functions: enqueue that takes an integer value and adds it to the queue, and dequeue that removes and returns the front element. Use the variables front, rear, and size to manage the circular queue logic.
DSA C++
Hint

Use modulo % to wrap rear and front around the array size.

4
Print the Queue Elements
Print the elements of the queue from front to rear in circular order separated by spaces. If the queue is empty, print Queue is empty.
DSA C++
Hint

Use a loop starting from front and move forward using modulo % size until you reach rear.

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 eliminates the need for front and rear pointers
B. It allows storing different data types in the same queue
C. It automatically sorts the elements in the queue
D. It efficiently uses the array space by reusing freed slots

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 are empty slots at the front.
  2. Step 2: Circular queue advantage

    Circular queue connects the end of the array back to the front, allowing reuse of empty slots freed by dequeuing.
  3. Final Answer:

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

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

Solution

  1. Step 1: Understand full condition in circular queue

    In circular queue, queue is full when next position of rear is front, i.e., (rear + 1) modulo n equals front.
  2. Step 2: Match condition with options

    front == (rear + 1) % n matches this condition: front == (rear + 1) % n.
  3. Final Answer:

    front == (rear + 1) % n -> Option A
  4. Quick Check:

    Full condition = front == (rear + 1) % n [OK]
Hint: Full when front is next to rear in circular manner [OK]
Common Mistakes:
  • Using rear == n - 1 which is for linear queue
  • Confusing front == rear as full (actually empty)
  • Swapping front and rear in condition
3. Consider a circular queue of size 5 (indices 0 to 4). Initially, front = -1 and rear = -1. After the following operations:
enqueue(10); enqueue(20); enqueue(30); dequeue(); enqueue(40); enqueue(50); dequeue(); enqueue(60);
What will be the values of front and rear?
medium
A. front = 2, rear = 1
B. front = 2, rear = 0
C. front = 3, rear = 0
D. front = 1, rear = 4

Solution

  1. Step 1: Trace each operation and update pointers

    Start: front = -1, rear = -1
    enqueue(10): front=0, rear=0
    enqueue(20): rear=1
    enqueue(30): rear=2
    dequeue(): front=1
    enqueue(40): rear=3
    enqueue(50): rear=4
    dequeue(): front=2
    enqueue(60): rear=(4+1)%5=0
  2. Step 2: Final pointer values

    front = 2, rear = 0 which corresponds to front = 2, rear = 0.
  3. Final Answer:

    front = 2, rear = 0 -> Option B
  4. Quick Check:

    Trace pointers carefully [OK]
Hint: Track front and rear after each enqueue/dequeue [OK]
Common Mistakes:
  • Not updating rear circularly after last index
  • Confusing front and rear updates on dequeue
  • Ignoring initial front = -1 condition
4. The following code snippet is part of a circular queue implementation. Identify the bug:
void enqueue(int value) {
  if ((rear + 1) % size == front) {
    cout << "Queue is full" << endl;
    return;
  }
  if (front == -1) front = 0;
  rear = (rear + 1) % size;
  arr[rear] = value;
}
medium
A. No bug, code is correct
B. The front pointer should be updated after rear
C. The initial check for empty queue should be before full check
D. The condition to check full queue is incorrect

Solution

  1. Step 1: Analyze full queue condition

    The condition (rear + 1) % size == front correctly checks if queue is full in circular queue.
  2. Step 2: Check front pointer update and enqueue steps

    If queue is empty (front == -1), front is set to 0 before inserting.
    rear is updated circularly and value inserted at arr[rear].
  3. Final Answer:

    No bug, code is correct -> Option A
  4. Quick Check:

    Full check and pointers update are correct [OK]
Hint: Full check uses modulo; front updated only if empty [OK]
Common Mistakes:
  • Misplacing front update after rear
  • Incorrect full condition without modulo
  • Checking empty after full condition
5. You have a circular queue of size 6. After performing the following operations:
enqueue(5); enqueue(10); enqueue(15); dequeue(); dequeue(); enqueue(20); enqueue(25); enqueue(30); enqueue(35);
What will be the sequence of elements in the queue from front to rear?
hard
A. 20 -> 25 -> 30 -> 35
B. 10 -> 15 -> 20 -> 25 -> 30 -> 35
C. 15 -> 20 -> 25 -> 30 -> 35
D. 5 -> 10 -> 15 -> 20 -> 25 -> 30

Solution

  1. Step 1: Trace each operation and queue content

    Start empty.
    enqueue(5): queue = [5]
    enqueue(10): queue = [5,10]
    enqueue(15): queue = [5,10,15]
    dequeue(): removes 5, queue = [10,15]
    dequeue(): removes 10, queue = [15]
    enqueue(20): queue = [15,20]
    enqueue(25): queue = [15,20,25]
    enqueue(30): queue = [15,20,25,30]
    enqueue(35): queue = [15,20,25,30,35]
  2. Step 2: Check queue size and elements

    Queue size is 6, current elements are 5.
    From front to rear: 15 -> 20 -> 25 -> 30 -> 35
  3. Final Answer:

    15 -> 20 -> 25 -> 30 -> 35 -> Option C
  4. Quick Check:

    After dequeues, front moves; final elements start from 15 [OK]
Hint: Remove dequeued elements, then list remaining from front to rear [OK]
Common Mistakes:
  • Forgetting to remove dequeued elements
  • Listing elements before dequeue operations
  • Assuming queue is full and ignoring last enqueue
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