Bird
Raised Fist0
DSA Typescriptprogramming~10 mins

Circular Queue Implementation Using Array in DSA Typescript - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to initialize the front pointer of the circular queue.

DSA Typescript
class CircularQueue {
  private front: number = [1];
  private rear: number = -1;
  private size: number;
  private queue: number[];

  constructor(size: number) {
    this.size = size;
    this.queue = new Array(size);
  }
}
Drag options to blanks, or click blank then click option'
A-1
B0
C1
Dnull
Attempts:
3 left
💡 Hint
Common Mistakes
Initializing front to 0, which makes the queue appear full initially since (-1 + 1) % size === 0.
Using null which is not a valid index.
2fill in blank
medium

Complete the code to check if the circular queue is full.

DSA Typescript
isFull(): boolean {
  return (this.rear + 1) % this.size === [1];
}
Drag options to blanks, or click blank then click option'
A-1
Bthis.front
Cthis.rear
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Comparing with rear instead of front.
Using 0 or -1 which do not represent the front pointer.
3fill in blank
hard

Fix the error in the enqueue method to correctly update the rear pointer.

DSA Typescript
enqueue(value: number): void {
  if (this.isFull()) {
    throw new Error('Queue is full');
  }
  this.rear = (this.rear [1] 1) % this.size;
  this.queue[this.rear] = value;
}
Drag options to blanks, or click blank then click option'
A+
B-
C*
D/
Attempts:
3 left
💡 Hint
Common Mistakes
Using subtraction which moves rear backward.
Using multiplication or division which are incorrect here.
4fill in blank
hard

Fill both blanks to correctly update the front pointer in the dequeue method and return the dequeued value.

DSA Typescript
dequeue(): number {
  if (this.front === -1) {
    throw new Error('Queue is empty');
  }
  const value = this.queue[this.front];
  if (this.front === this.rear) {
    this.front = [1];
    this.rear = [2];
  } else {
    this.front = (this.front + 1) % this.size;
  }
  return value;
}
Drag options to blanks, or click blank then click option'
A-1
B0
Cthis.size
Dnull
Attempts:
3 left
💡 Hint
Common Mistakes
Resetting pointers to 0 which is a valid index.
Using null which is not a number.
5fill in blank
hard

Fill both blanks to implement the peek method that returns the front element without removing it.

DSA Typescript
peek(): number {
  if (this.front === [1]) {
    throw new Error('Queue is empty');
  }
  return this.queue[[2]];
}
Drag options to blanks, or click blank then click option'
A-1
Bthis.front
Cthis.rear
D0
Attempts:
3 left
💡 Hint
Common Mistakes
Checking rear instead of front for empty queue.
Returning element at rear instead of front.

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 allows storing different data types in the same queue.
B. It efficiently uses all available space by wrapping around the array.
C. It automatically sorts the elements in the queue.
D. It uses less memory than a linear queue.

Solution

  1. Step 1: Understand linear queue limitation

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

    A circular queue connects the end of the array back to the front, allowing reuse of empty spaces and efficient use of the array.
  3. Final Answer:

    It efficiently uses all available space by wrapping around the array. -> Option B
  4. Quick Check:

    Circular queue = efficient space use [OK]
Hint: Circular queue reuses space by wrapping indices [OK]
Common Mistakes:
  • Thinking circular queue sorts elements
  • Believing it uses less memory than linear queue
  • Assuming it stores different 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 size with front and rear indices?
easy
A. if (rear === front)
B. if (front === -1)
C. if ((rear + 1) % size === front)
D. if (rear === size - 1)

Solution

  1. Step 1: Understand full condition in circular queue

    The queue is full when the next position of rear (rear + 1) modulo size equals front, meaning no space to insert.
  2. Step 2: Apply modulo for wrap-around

    Using modulo ensures the rear wraps to the start of the array, so the condition is (rear + 1) % size === front.
  3. Final Answer:

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

    Full condition = (rear + 1) % size === front [OK]
Hint: Full when next rear wraps to front [OK]
Common Mistakes:
  • Checking rear === front means empty, not full
  • Using rear === size - 1 ignores wrap-around
  • Checking front === -1 is for empty queue
3. Consider a circular queue of size 5 (indices 0 to 4). Initially, front = 0 and rear = 3. After performing enqueue(10) and dequeue(), what are the new values of front and rear?
medium
A. front = 0, rear = 4
B. front = 1, rear = 3
C. front = 0, rear = 3
D. front = 1, rear = 4

Solution

  1. Step 1: Perform enqueue(10)

    rear moves from 3 to (3 + 1) % 5 = 4. So rear = 4, front remains 0.
  2. Step 2: Perform dequeue()

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

    front = 1, rear = 4 -> Option D
  4. Quick Check:

    Enqueue rear+1=4, Dequeue front+1=1 [OK]
Hint: Update rear on enqueue, front on dequeue with modulo [OK]
Common Mistakes:
  • Not applying modulo for wrap-around
  • Updating front on enqueue instead of rear
  • Confusing initial and final pointer positions
4. Given the following TypeScript snippet for dequeue operation in a circular queue, identify the bug:
function dequeue() {
  if (front === -1) return null;
  const value = queue[front];
  if (front === rear) {
    front = rear = -1;
  } else {
    front = front + 1;
  }
  return value;
}
medium
A. Missing modulo operation when updating front, causing index overflow.
B. Incorrect check for empty queue; should check rear instead of front.
C. Should update rear instead of front after dequeue.
D. Returning value before updating front causes wrong output.

Solution

  1. Step 1: Analyze front update in dequeue

    The code updates front as front = front + 1 without modulo, which can exceed array bounds.
  2. Step 2: Correct update with modulo

    To wrap around in circular queue, front should be updated as front = (front + 1) % size.
  3. Final Answer:

    Missing modulo operation when updating front, causing index overflow. -> Option A
  4. Quick Check:

    Front update needs modulo [OK]
Hint: Always use modulo when moving front or rear [OK]
Common Mistakes:
  • Forgetting modulo causes index errors
  • Confusing front and rear updates
  • Wrong empty queue condition check
5. You have a circular queue of size 4. You perform these operations in order: enqueue(5), enqueue(10), enqueue(15), dequeue(), enqueue(20), enqueue(25). What will be the final state of the queue array (index 0 to 3) and the positions of front and rear?
hard
A. Queue: [25, 10, 15, 20], front = 1, rear = 0
B. Queue: [5, 10, 15, 20], front = 1, rear = 3
C. Queue: [20, 25, 15, 10], front = 0, rear = 1
D. Queue: [10, 15, 20, 25], front = 0, rear = 3

Solution

  1. Step 1: Perform enqueues and dequeue step-by-step

    Start: front = -1, rear = -1, queue size = 4 - enqueue(5): front=0, rear=0, queue=[5,_,_,_] - enqueue(10): rear=1, queue=[5,10,_,_] - enqueue(15): rear=2, queue=[5,10,15,_] - dequeue(): front=1, queue unchanged - enqueue(20): rear=3, queue=[5,10,15,20] - enqueue(25): rear=(3+1)%4=0, queue[0]=25, queue=[25,10,15,20]
  2. Step 2: Final front and rear positions

    front=1 (pointing to 10), rear=0 (pointing to 25). Queue array is [25,10,15,20].
  3. Final Answer:

    Queue: [25, 10, 15, 20], front = 1, rear = 0 -> Option A
  4. Quick Check:

    Wrap rear with modulo, front moves on dequeue [OK]
Hint: Track front/rear with modulo after each operation [OK]
Common Mistakes:
  • Not wrapping rear index on enqueue
  • Not updating front on dequeue
  • Mixing up front and rear positions
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