PYTHON
Implementing a First-In, First-Out (FIFO) Queue with Deque
Efficiently implement a FIFO queue in Python using `collections.deque` for fast appends and pops from both ends, ideal for managing ordered tasks.
from collections import deque
class Queue:
def __init__(self):
self._items = deque()
def is_empty(self):
return not bool(self._items)
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 peek(self):
if self.is_empty():
raise IndexError("peek from empty queue")
return self._items[0]
def size(self):
return len(self._items)
# Example Usage:
my_queue = Queue()
my_queue.enqueue("Task A")
my_queue.enqueue("Task B")
my_queue.enqueue("Task C")
print(f"Queue size: {my_queue.size()}") # Output: Queue size: 3
print(f"Next item: {my_queue.peek()}") # Output: Next item: Task A
print(f"Dequeued: {my_queue.dequeue()}") # Output: Dequeued: Task A
print(f"Queue size after dequeue: {my_queue.size()}") # Output: Queue size after dequeue: 2
How it works: This snippet illustrates how to implement a First-In, First-Out (FIFO) queue using `collections.deque`. Unlike standard lists where `pop(0)` is inefficient (O(N)), `deque` provides O(1) performance for `append()` (enqueue) and `popleft()` (dequeue), making it highly suitable for queue implementations. This data structure is crucial for scenarios like task scheduling, breadth-first search algorithms, and managing request streams.