Python Queue Data Structure Tutorial
掌握Python中的FIFO佇列操作。執行並執行我們的互動式佇列範例,展示入隊和出隊方法。
概述
佇列是一種按照先進先出 (FIFO) 原則運作的線性資料結構。元素在後面添加(入隊)並從前面刪除(出隊),就像商店中的收銀台一樣。
隊列在計算機科學中至關重要,它可以按照任務到達的確切順序處理任務。它們充當分離生產者和消費者進程的緩衝區。
Python provides multiple ways to build queues: basic lists, the `collections.deque` module for thread-safe fast operations, and the `queue.Queue` module specifically designed for multi-threaded applications.
程式碼和執行輸出
使用 collections.deque 建構的互動式 FIFO 佇列,用於高效的前端移除作業。
queue_demo.py
在編輯器中嘗試from collections import deque
class Queue:
def __init__(self):
self.buffer = deque()
def enqueue(self, item):
self.buffer.append(item)
print(f"Enqueued: {item}")
def dequeue(self):
if self.is_empty():
return "Underflow: Queue is empty"
dequeued = self.buffer.popleft()
print(f"Dequeued: {dequeued}")
return dequeued
def is_empty(self):
return len(self.buffer) == 0
def size(self):
return len(self.buffer)
# Test the Queue
q = Queue()
q.enqueue("Customer 1")
q.enqueue("Customer 2")
q.enqueue("Customer 3")
print(f"Queue Size: {q.size()}")
q.dequeue()
q.dequeue()
print(f"Remaining in Queue: {list(q.buffer)}")端子輸出
Enqueued: Customer 1
Enqueued: Customer 2
Enqueued: Customer 3
Queue Size: 3
Dequeued: Customer 1
Dequeued: Customer 2
Remaining in Queue: ['Customer 3']逐步實施
- 在伺服器 Web 框架中處理非同步請求
- Job scheduling queues in operating systems
- 訊息代理程式和佇列緩衝區(如 RabbitMQ 或 Redis)
常見問題解答
Why not use list.pop(0) to dequeue in Python?
使用 list.pop(0) 很慢,因為它需要將記憶體中的所有後續元素向左移動一個索引,從而導致 O(n) 效能。相較之下,「deque.popleft()」的運行時間為 O(1) 常數。
What is a Priority Queue?
優先權佇列是一種變體,其中元素根據關聯的優先權而不是到達順序提供服務。 Python implements this via the `heapq` module.