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 佇列,用於高效的前端移除作業。

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.

相關主題