Queue
A Queue is a FIFO (First In, First Out) data structure. The first element added is the first one removed. Like a line at a checkout counter.
Basic Operations
- Enqueue: Add an element to the back of the queue.
- Dequeue: Remove an element from the front of the queue.
- Front: Look at the front element.
- isEmpty: Check whether the queue is empty.
Implementation with a Python List
queue = []
# Enqueue
queue.append(10)
queue.append(20)
queue.append(30)
# Dequeue (inefficient: O(n))
first = queue.pop(0)
print(first) # 10
Note:
pop(0)on a Python list is O(n) because every element must be shifted.
Implementation with collections.deque
from collections import deque
queue = deque()
# Enqueue
queue.append(10)
queue.append(20)
queue.append(30)
# Dequeue (efficient: O(1))
first = queue.popleft()
print(first) # 10
# Front
print(queue[0]) # 20
Class Implementation
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("Queue is empty")
return self.items.popleft()
def front(self):
if self.is_empty():
raise IndexError("Queue is empty")
return self.items[0]
def is_empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
Time Complexity
| Operation | List | Deque |
|---|---|---|
| Enqueue | O(1) | O(1) |
| Dequeue | O(n) | O(1) |
| Front | O(1) | O(1) |
| Size | O(1) | O(1) |
Queue Applications
- BFS: Graph traversal level by level.
- Print Queue: Document printing queue.
- Task Scheduling: Process queue in an OS.
- Buffer: Streaming data.
- Message Queue: Communication between services.
q = Queue()
q.enqueue("A")
q.enqueue("B")
q.enqueue("C")
print(q.dequeue()) # A
print(q.front()) # B
A Queue restricts access to two opposite ends. If you need access from both ends, use a Deque.