← Back to DSA
🚦

Data Structures

Queue

A FIFO (First In, First Out) structure where elements are added at the back and removed from the front.

Complexity

Time (Best)

O(1)

Time (Avg)

O(1)

Time (Worst)

O(1)

Space

O(n)

Key Points

  • ›FIFO: first element enqueued is the first dequeued
  • ›Enqueue (add to back) and Dequeue (remove from front) are O(1)
  • ›Use a deque (double-ended queue) for O(1) on both ends
  • ›Array-based queue has O(n) dequeue unless using a circular buffer or deque
  • ›Essential for BFS, task scheduling, and buffering

Code Examples

Swift
struct Queue<T> {
    private var elements: [T] = []

    mutating func enqueue(_ element: T) {
        elements.append(element)
    }

    @discardableResult
    mutating func dequeue() -> T? {
        guard !elements.isEmpty else { return nil }
        return elements.removeFirst()  // O(n) — use a proper deque for O(1)
    }

    func peek() -> T? { elements.first }
    var isEmpty: Bool { elements.isEmpty }
    var count: Int { elements.count }
}

var queue = Queue<Int>()
queue.enqueue(1); queue.enqueue(2); queue.enqueue(3)
print(queue.peek()!)  // 1
queue.dequeue()
print(queue.count)    // 2

Practice Problems

Implement Queue using Stacks
Design Circular Queue
Number of Recent Calls
Sliding Window Maximum