Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

キュー

キュー(Queue) はデータの中で最初に入ったものが最初に取り出される、 先入れ先出し(First In First Out: FIFO) のデータ構造

キューの末尾に要素を追加することを エンキュー(enqueue) といい、
キューの先頭から要素を取り出すことを デキュー(dequeue) という。

実装例

Pythonでは、シンプルなキューとして collections パッケージのdequeが存在する。

また queueパッケージのQueueというクラスも存在する。

collections.dequeue はスレッドセーフではなく、 queue.Queue はスレッドセーフなのが主な違い

A
B
A
B

計算量

キューは内部的に連結リスト(または双方向キュー)で実装されるため、先頭・末尾へのアクセスがO(1)になる。

操作計算量説明
enqueueO(1)O(1)末尾への追加
dequeueO(1)O(1)先頭からの取り出し
peek(先頭参照)O(1)O(1)先頭要素の参照(取り出しなし)
is_emptyO(1)O(1)空かどうかの確認
サイズ取得O(1)O(1)要素数の取得
探索O(n)O(n)特定の要素を見つけるには全走査が必要

Pythonの queue.Queue は内部で collections.deque を使用しており、enqueue・dequeueともに償却 O(1)O(1)。

利用例

例1: タスクの順番処理

受け付けた順にタスクを処理する。新しいタスクは末尾に追加し、処理は先頭から行う。

例2: 最短ステップ数(BFS)

スタート地点からゴールまで何ステップで到達できるか求める。
1ステップで +1 か +2 だけ進める場合に、位置 0 から位置 n まで最短何ステップかかるか。