Python キュー データ構造のチュートリアル

Python で FIFO キュー操作をマスターします。エンキューおよびデキューのメソッドを紹介する対話型キューの例を実行してください。

エディターで試してみる

概要

キューは、先入れ先出し (FIFO) 原則に基づいて動作する線形データ構造です。店舗のレジの列と同様に、要素は後部で追加され (エンキュー)、前部から削除されます (デキュー)。

キューは、到着した正確な順序でタスクを処理するためにコンピューター サイエンスにおいて重要です。これらは、プロデューサーとコンシューマーのプロセスを分離するバッファーとして機能します。

Python ではキューを構築するための複数の方法が提供されています。基本的なリスト、スレッドセーフな高速操作のための `collections.deque` モジュール、およびマルチスレッド アプリケーション専用に設計された `queue.Queue` モジュールです。

コードと実行の出力

効率的なフロント削除操作のために 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 フレームワークでの非同期リクエストの処理
  • オペレーティング システムのジョブ スケジューリング キュー
  • メッセージ ブローカーとキュー バッファー (RabbitMQ や Redis など)

よくある質問

Python でのデキューに list.pop(0) を使用しないのはなぜでしょうか?

`list.pop(0)` を使用すると、メモリ内の後続のすべての要素を 1 インデックス左にシフトする必要があり、パフォーマンスが O(n) になるため遅くなります。対照的に、`deque.popleft()` は O(1) 定数時間で実行されます。

プライオリティキューとは何ですか?

優先キューは、要素が到着順序ではなく、関連付けられた優先順位に基づいて処理されるバリエーションです。 Python は、「heapq」モジュールを介してこれを実装します。

関連トピック