キュー 【queue】 待ち行列

概要

キュー(queue)とは、最も基本的なデータ構造の一つで、要素を入ってきた順に一列に並べ、先に入れた要素から順に取り出すという規則で出し入れを行うもの。窓口などの順番を待つ人の行列をモデル化したものとも言える。

解説 キューは先頭が常に最も古い要素になるデータ構造で、新しい要素は必ず末尾に追加される。取り出すときは常に先頭の最も古い要素から取り出される。このように先に入れたものほど先に取り出される管理方式を「FIFO」(First-In First-Out先入れ先出し)という。

実装上は、キューのために確保された記憶領域の中ですべての要素が到着順に並ぶとは限らず、実際の位置や順序とは別に到着順や末尾の位置などの情報を内部的に記録・管理する手法が用いられることが多い。人間の行列のように要素が取り出されるたびに残りのすべての要素の物理的な位置を隣(一つ前)に移動させるのは非効率だからである。

バリエーションとして、列の両端から要素の追加や取り出しを行える「両端キュー」(double-ended queue)や、追加する要素に優先度を設定して、優先度の高いものから取り出すようにする「優先度付きキュー」(priority queue)などがある。

一方、「先に足された要素ほど後に取り出される」(末尾から順に取り出す)という規則で要素の出し入れを管理するデータ構造は「スタック」(stack)と呼ばれる。そのような管理方式を「LIFO」(Last-In First-Out:後入れ先出し)あるいは「FILO」(First-In Last-Out:先入れ後出し)という。

要素の出し入れ

キューに要素を追加する操作を「エンキュー」(enqueue)、取り出す操作を「デキュー」(dequeue)という。エンキューされた要素はキューの末尾に追加され、キューの要素数は1増加する。

デキューを指示するとキューの先頭の要素が取り出され、その要素はキューから取り除かれる。先頭から2番目にあった要素(2番目に古かったデータ)が新しい先頭になり、キューの要素数は1減少する。

キューイング (queuing/queueing)

キューを用いて要素の管理を行うことを「キューイング」(queuing)という。キューイングは機器間やプログラム間など独立に動作する二つの主体の間で非同期にデータの受け渡しを行う手法としてよく用いられる。システム間で汎用的にデータを受け渡しするシステムを「メッセージキュー」(message queue)という。

例えば、コンピュータからプリンタにデータを伝送する速度とプリンタがデータを紙に印刷する速度では、後者のほうが圧倒的に遅い。伝送と印刷を同時に行おうとするとコンピュータ側はほとんどの時間待たされることになり無駄であるため、印刷データを一旦キューに保管し、プリンタの処理の進み具合に応じて専用の制御プログラムが少しずつデータを伝送する手法が用いられる。

(2024.3.11更新)

他の用語辞典による「キュー」の解説 (外部サイト)

資格試験などの「キュー」の出題履歴

▼ ITパスポート試験
平30春 問96】 先入れ先出し(First-In First-Out, FIFO)処理を行うのに適したキューと呼ばれるデータ構造に対して“8”、“1”、“6”、“3”の順に値を格納してから、取出しを続けて2回行った。
平23春 問58】 あるキューに要素“33”、要素“27”及び要素“12”の三つがこの順序で格納されている。このキューに要素“45”を追加した後に要素を二つ取り出す。

▼ 基本情報技術者試験
令6修6 問4】 多数のクライアントが,LANに接続された1台のプリンタを共同利用するときの印刷要求から印刷完了までの所要時間を,待ち行列理論を適用して見積もる場合について考える。
令5修7 問5】 空の状態のキューとスタックの二つのデータ構造がある。次の手続を順に実行した場合,変数xに代入されるデータはどれか。ここで,手続で引用している関数は,次のとおりとする。
令4修7 問7】 空の状態のキューとスタックの二つのデータ構造がある。次の手続を順に実行した場合,変数xに代入されるデータはどれか。ここで,手続で引用している関数は,次のとおりとする。
令4修1 問4】 多数のクライアントが,LANに接続された1台のプリンタを共同利用するときの印刷要求から印刷完了までの所要時間を,待ち行列理論を適用して見積もる場合について考える。
令3修1 問7】 空の状態のキューとスタックの二つのデータ構造がある。次の手続を順に実行した場合,変数xに代入されるデータはどれか。ここで,手続で引用している関数は,次のとおりとする。
令2修12 問7】 キューに関する記述として,最も適切なものはどれか。
令2修6 問8】 待ち行列に対する操作を,次のとおり定義する。 ENQ n:待ち行列にデータnを挿入する。 DEQ :待ち行列からデータを取り出す。
令1修12 問4】 多数のクライアントが,LANに接続された1台のプリンタを共同利用するときの印刷要求から印刷完了までの所要時間を,待ち行列理論を適用して見積もる場合について考える。
平30秋 問5】 待ち行列に対する操作を,次のとおり定義する。 ENQ n:待ち行列にデータnを挿入する。 DEQ :待ち行列からデータを取り出す。
平29修7 問5】 FIFO(First-In First-Out)の処理に適したデータ構造はどれか。
平29修6 問5】 空の状態のキューとスタックの二つのデータ構造がある。次の手続を順に実行した場合,変数xに代入されるデータはどれか。ここで,手続で引用している関数は,次のとおりとする。
平29修1 問5】 待ち行列に対する操作を,次のとおり定義する。 ENQ n:待ち行列にデータnを挿入する。 DEQ :待ち行列からデータを取り出す。
平27春 問5】 キューに関する記述として,最も適切なものはどれか。
平26修12 問5】 待ち行列に対する操作を,次のとおり定義する。 ENQ n:待ち行列にデータnを挿入する。 DEQ :待ち行列からデータを取り出す。
平26春 問7】 空の状態のキューとスタックの二つのデータ構造がある。次の手続を順に実行した場合,変数xに代入されるデータはどれか。ここで,手続で引用している関数は,次のとおりとする。
平25秋 問5】 待ち行列に対する操作を,次のとおり定義する。 ENQ n:待ち行列にデータnを挿入する。 DEQ :待ち行列からデータを取り出す。
平24秋 問5】 四つのデータA,B,C,Dがこの順に入っているキューと空のスタックがある。手続pop_enq,deq_pushを使ってキューの中のデータをD,C,B,Aの順に並べ替えるとき,deq_pushの実行回数は最小で何回か。
平24修6 問5】 キューに関する記述として,最も適切なものはどれか。
平22修12 問5】 待ち行列に対する操作を,次のとおり定義する。 ENQ n:待ち行列にデータnを挿入する。 DEQ :待ち行列からデータを取り出す。
平22修6 問5】 FIFO(First-In First-Out)の処理に適したデータ構造はどれか。
平22修1 問5】 空の状態のキューとスタックの二つのデータ構造がある。次の手続を順に実行した場合,変数xに代入されるデータはどれか。ここで, データyをスタックに挿入することを push(y), スタックからデータを取り出すことを pop(), データyをキューに挿入することを enq(y), キューからデータを取り出すことを deg(),とそれぞれ表す。