CoursesDSA MasterclassStacks & Queues
Beginner·1 min read

Queues & Variants

Master FIFO queues, priority queues, and deques.

Queues & Variants

A queue follows First In, First Out (FIFO) - like a line at a store.

``

Enqueue(10), Enqueue(20), Enqueue(30):

Front → [10] [20] [30] ← Rear

Dequeue from here → Enqueue here

`

Queue Variants

Header
TypeDescriptionUse Case
Header
Simple QueueFIFOPrint queue, BFS
Circular QueueWrap-around arrayBuffer, scheduling
Priority QueueHighest priority firstDijkstra, heap sort
DequeDouble-ended queuePalindrome check, sliding window

Circular Queue

Uses modular arithmetic to reuse empty spaces at the front:

`

front = (front + 1) % capacity

rear = (rear + 1) % capacity

`

Deque (Double-Ended Queue)

Insert and delete from both ends in O(1):

`

Push_front(10) Push_back(20) Push_back(30)

[10] [20] [30]

Pop_front() → returns 10

[20] [30]

``

Applications

  • BFS traversal: Process nodes level by level
  • Sliding window maximum: Use deque to maintain window
  • Task scheduling: OS process scheduling
  • Web server request handling: FIFO request processing

Code Example

python
from collections import deque

# Simple Queue
class Queue:
    def __init__(self):
        self.items = deque()

    def enqueue(self, item):
        self.items.append(item)

    def dequeue(self):
        if self.is_empty():
            raise IndexError("Dequeue from empty queue")
        return self.items.popleft()

    def front(self):
        if self.is_empty():
            raise IndexError("Front of empty queue")
        return self.items[0]

    def is_empty(self):
        return len(self.items) == 0

    def size(self):
        return len(self.items)

# Sliding window maximum using deque
def max_sliding_window(nums, k):
    dq = deque()
    result = []
    for i, num in enumerate(nums):
        while dq and dq[0] < i - k + 1:
            dq.popleft()
        while dq and nums[dq[-1]] < num:
            dq.pop()
        dq.append(i)
        if i >= k - 1:
            result.append(nums[dq[0]])
    return result

print(max_sliding_window([1, 3, -1, -3, 5, 3, 6, 7], 3))
# Output: [3, 3, 5, 5, 6, 7]

Practice Problems

  • 01Implement a circular queue using an array
  • 02Generate binary numbers from 1 to n using a queue
  • 03Implement a stack using two queues