0
0
DSA Pythonprogramming~20 mins

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

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Queue Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output after these queue operations?

Consider a queue implemented using an array with a fixed size of 5. Initially, the queue is empty.

Operations performed in order:

  1. enqueue(10)
  2. enqueue(20)
  3. dequeue()
  4. enqueue(30)
  5. enqueue(40)
  6. dequeue()
  7. enqueue(50)

What is the state of the queue from front to rear?

DSA Python
class Queue:
    def __init__(self, size=5):
        self.size = size
        self.queue = [None]*size
        self.front = -1
        self.rear = -1

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

    def dequeue(self):
        if self.front == -1 or self.front > self.rear:
            return "Queue Empty"
        else:
            val = self.queue[self.front]
            self.front += 1
            return val

    def display(self):
        if self.front == -1 or self.front > self.rear:
            return []
        return self.queue[self.front:self.rear+1]

q = Queue()
q.enqueue(10)
q.enqueue(20)
q.dequeue()
q.enqueue(30)
q.enqueue(40)
dq = q.dequeue()
q.enqueue(50)
print(q.display())
A[30, 40, 50]
B[20, 30, 40, 50]
C[40, 50]
D[10, 20, 30, 40, 50]
Attempts:
2 left
💡 Hint

Remember that dequeue removes from the front and enqueue adds at the rear. The queue does not shift elements after dequeue.

🧠 Conceptual
intermediate
1:00remaining
What happens when you enqueue in a full queue implemented with an array?

In a fixed-size array queue implementation, what is the typical behavior when you try to enqueue an element but the queue is already full?

AThe oldest element is removed to make space for the new element.
BThe queue automatically resizes to accommodate the new element.
CThe enqueue operation fails or returns an error indicating the queue is full.
DThe new element overwrites the last element in the queue.
Attempts:
2 left
💡 Hint

Think about fixed size and no dynamic resizing.

🔧 Debug
advanced
1:30remaining
Identify the error in this dequeue method of array queue

What error will this dequeue method cause when called repeatedly on a queue?

DSA Python
def dequeue(self):
    if self.front == -1 or self.front > self.rear:
        return "Queue Empty"
    val = self.queue[self.front]
    self.front += 1
    if self.front > self.rear:
        self.front = self.rear = -1
    return val
ANo error; works correctly resetting front and rear when empty.
BAfter all elements are dequeued, enqueue will fail because front and rear are not reset.
CIt causes an IndexError when front exceeds rear because it accesses invalid index.
DIt causes infinite loop because front is never incremented.
Attempts:
2 left
💡 Hint

Check how front and rear are reset after last element is dequeued.

Predict Output
advanced
2:00remaining
What is the output of this circular queue enqueue sequence?

Given a circular queue of size 4, initially empty, perform these operations:

  1. enqueue(1)
  2. enqueue(2)
  3. enqueue(3)
  4. dequeue()
  5. enqueue(4)
  6. enqueue(5)

What is the queue content from front to rear?

DSA Python
class CircularQueue:
    def __init__(self, size=4):
        self.size = size
        self.queue = [None]*size
        self.front = -1
        self.rear = -1

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

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

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

cq = CircularQueue()
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[3, 4, 5]
C[1, 2, 3, 4]
D[4, 5]
Attempts:
2 left
💡 Hint

Remember circular queue wraps around the array.

🧠 Conceptual
expert
1:30remaining
Why is a circular queue preferred over a simple array queue?

Which of the following best explains why circular queue implementation is preferred over a simple array queue?

ACircular queue stores elements in sorted order automatically.
BCircular queue allows dynamic resizing of the array automatically.
CCircular queue removes the need for front and rear pointers.
DCircular queue efficiently uses all array slots by wrapping around, avoiding wasted space after dequeues.
Attempts:
2 left
💡 Hint

Think about what happens to space in a simple array queue after many dequeues.