×
データ構造とアルゴリズム

キュー(Queue)は、最初に入れたデータが最初に出ていく「先入れ先出し(FIFO:First In, First Out)」の特性を持つデータ構造で、和訳では「待ち行列」とも呼ばれます。データを末尾に追加する操作を「エンキュー(Enqueue)」、先頭からデータを取り出す操作を「デキュー(Dequeue)」と呼びます。キューは、処理能力に限りがある資源に対して、到着した処理要求を公平に順番待ちさせるバッファとして用いられます。例えば、OSのプロセススケジューリングにおけるタスクの実行待ち行列、ネットワーク機器(ルータなど)の送信パケットのバッファ、イベント駆動型プログラムでのイベントメッセージの処理順序管理など、システムの処理性能や安定性を維持するために広く使われています。メモリ上での実装においては、配列のインデックスを循環させてメモリ領域を効率よく使い回す「リングバッファ(環状バッファ)」という手法が組み合わせて用いられるのが一般的です。

試験でのポイント

試験では、キューに対するデータのエンキューとデキューを繰り返し実行した際の配列の内部状態(ポインタの移動)や、要素の格納状態を問う問題が定番です。特に、配列の末尾に達したポインタを先頭に戻す「リングバッファ」を用いたキューの実装ロジック(ポインタの加算に剰余演算を用いる計算式など)についてプログラム問題やアルゴリズム問題で出題されることがあります。また、FIFOという用語の定義自体もストレートに問われます。

関連する用語

FIFO(先入れ先出しの管理方式)、リングバッファ(配列の末尾と先頭を繋げて輪のように扱うメモリ管理法)、待ち行列モデル(M/M/1モデルなど、キューの滞留時間を数学的に分析する理論)。