キューの解説(基本情報技術者シラバス用語)

目次

キューとは

キュー(Queue)とは、データを一時的に保存するデータ構造の一種で、最初に入れたデータが最初に出ていき、最後に入れたデータは最後に出ていく「先入れ先出し(FIFO:First In, First Out / 待ち行列)」という規則で管理される仕組みです。列の最後尾にデータを追加する操作を「エンキュー」、列の先頭からデータを取り出す操作を「デキュー」と呼びます。

具体例

プリンターの印刷処理が代表的な例です。複数のパソコンから送られてきた印刷指示(データ)はキューに溜められ、送信されたのが早い順(先に入った指示)に1つずつ順番に印刷されます。

// キューの動作イメージ
let printQueue = [];
printQueue.push("文書1"); // エンキュー
printQueue.push("文書2");
let firstPrint = printQueue.shift(); // デキュー
console.log(firstPrint); // 出力: "文書1" (先に入ったものが最初に出る)

もう少し詳しく

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

試験でのポイント

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

関連する用語

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

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ