対象試験と出題頻度

キュー(FIFO)は、ITパスポート・基本情報技術者・応用情報技術者のすべてで出題されるテーマです。

データ構造の基本として定番中の定番であり、「スタック(LIFO)」との違いを正確に区別できるかが問われます。

 

科目Aの知識問題だけでなく、基本情報の科目Bではキューを使ったプログラムのトレース問題も出題されています。

詳細をクリックして確認
対象試験:
ITパスポート
基本情報技術者
応用情報技術者
出題頻度:
★★★★☆
ランクA(重要)必ず覚えておくべき

用語の定義

情報処理試験を勉強していると、「キューとスタックって何が違うの?」と混乱しがちです。

キュー(Queue)とは、一言で言うと

 「先に入れたデータから先に取り出す(FIFO:First-In First-Out)」データ構造

のことです。

イメージとしては、「コンビニのレジに並ぶ行列」です。

 

先に並んだ人から先に会計を済ませて列を抜ける。割り込みは許されません。

データの世界でもこの「先着順」のルールを厳密に守る入れ物、それがキューです。

📊 キュー(FIFO)の基本情報

項目 内容
英語名 Queue(=待ち行列)
データの出し入れ方式 FIFO(First-In First-Out:先入れ先出し)
格納操作 エンキュー(enqueue)
取出し操作 デキュー(dequeue)
対になるデータ構造 スタック(LIFO:後入れ先出し)

解説

プログラムが複数の処理要求を受け取ったとき、「どの順番で処理するか」を管理する仕組みが必要です。

到着順に公平に処理したい場面で使われるのがキューであり、OSのプロセス管理やネットワーク機器のパケット処理など、ITの至る所で活躍しています。

 

エンキューとデキューの動き

キューの操作はたった2つです。データを末尾に追加する「エンキュー(enqueue)」と、先頭から取り出す「デキュー(dequeue)」。この2つだけ覚えれば操作は完結します。

▼ キューの操作イメージ(enqueue → dequeue)

【① 初期状態(空のキュー)】

 先頭 → (空) ← 末尾

【② enqueue(A)】

 先頭 → A ← 末尾

【③ enqueue(B)】

 先頭 → AB ← 末尾

【④ enqueue(C)】

 先頭 → ABC ← 末尾

【⑤ dequeue() → Aが取り出される】

 先頭 → BC ← 末尾  取出し: A

【⑥ dequeue() → Bが取り出される】

 先頭 → C ← 末尾  取出し: B

※入れた順(A→B→C)と同じ順に取り出される。これがFIFO。

スタック(LIFO)との違い

キューと対になるデータ構造がスタックです。

スタックは「後に入れたデータから先に取り出す(LIFO:Last-In First-Out)」仕組みで、イメージは「積み上げた本の山」。一番上(=最後に置いた本)から順に取り出します。

▼ キューとスタックの比較

比較項目 キュー(Queue) スタック(Stack)
方式 FIFO(先入れ先出し) LIFO(後入れ先出し)
日常の例え レジの行列 積み上げた本の山
格納操作 enqueue(エンキュー) push(プッシュ)
取出し操作 dequeue(デキュー) pop(ポップ)
主な用途 印刷ジョブの管理、
プロセスのスケジューリング
関数の呼び出し管理、
「元に戻す(Undo)」機能

ここだけは確実に押さえてください。「先に入れたものが先に出る=キュー(FIFO)」「後に入れたものが先に出る=スタック(LIFO)」。この対比が全ての基本です。

では、この用語が試験でどのように出題されるか見ていきましょう。

💡 キュー(FIFO)の核心を3行で

・先に格納したデータから先に取り出すデータ構造(First-In First-Out)
・格納はenqueue、取出しはdequeue。操作名もセットで覚える
・スタック(LIFO)は「後入れ先出し」。キューとは取り出す順序が逆になる


試験ではこう出る!

キューは、ITパスポートから応用情報まで幅広い試験区分で繰り返し出題されている定番テーマです。

出題パターンは大きく3つに分かれます。

📊 過去問での出題実績

試験回 出題内容 問われたポイント
IP H30春
問96
キューに “8”,”1″,”6″,”3″ の順に格納し、2回取り出したときの値を問う問題。 ・FIFOの取出し順を正しくトレースできるか
・2回目の取出しは2番目に入れた “1”
FE H26春
午前 問7
キューとスタックを組み合わせてpush/pop/enqueue/dequeueを実行し、変数xに入る値を問う問題。 ・キューとスタックそれぞれの取出し順を混同しないか
・操作を1手ずつトレースする力
FE H24秋
午前 問5
キューのデータをスタックを使ってD,C,B,Aの逆順に並べ替えるために、deq_pushの最小実行回数を問う問題。 ・スタックの後入れ先出し特性を利用して逆順にする手順
・操作回数の最適化を手で追えるか
FE 科目B
サンプル 問8
キューのデータ構造を使ったプログラムのトレース問題。 ・科目Bの擬似言語でキューの操作をトレースできるか
・enqueue/dequeueの動きをコード上で追う

📝 IPA試験での出題パターン

パターン1:「格納・取出しの結果を答えよ」
IP H30春 問96のように、キューにデータを入れてから取り出した結果を問う定番形式。FIFOの原則を知っていれば即答できる。ひっかけとして、スタック(LIFO)の取出し順を答えさせようとする選択肢が混ざる。

 

パターン2:「キューとスタックを組み合わせた操作」
FE H26春 問7のように、キューとスタック両方の操作を交互に実行して最終結果を問う形式。1手ずつ丁寧に追えば解けるが、どちらがFIFOでどちらがLIFOかを混同すると全手順が崩れる。

 

パターン3:「科目Bの擬似言語でキューを操作するプログラム」
基本情報の科目Bでは、キューをクラスやリスト構造で実装したプログラムのトレースが出題される。操作の名前と動きを正確に把握していることが前提になる。

 

試験ではここまででOKです。「FIFO=キュー」「LIFO=スタック」の対応と、enqueue/dequeueの操作名を覚えていれば得点できます。深追いは不要です。


【確認テスト】理解度チェック

ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。


Q. データ構造「キュー」の説明として、最も適切なものはどれでしょうか?

  • A. 先に格納したデータから先に取り出される先入れ先出し(FIFO)方式のデータ構造であり、格納操作をエンキュー、取出し操作をデキューと呼ぶ。
  • B. 後に格納したデータから先に取り出される後入れ先出し(LIFO)方式のデータ構造であり、格納操作をプッシュ、取出し操作をポップと呼ぶ。
  • C. 各要素がポインタで次の要素を指し示す連結リスト方式のデータ構造であり、任意の位置への挿入・削除が得意である。

正解と解説を見る

正解:A

解説:
キューは先に格納したデータから順に取り出すFIFO方式のデータ構造です。データを末尾に追加するエンキューと、先頭から取り出すデキューの2操作で構成されます。

選択肢Bはスタック(Stack)の説明です。スタックはLIFO方式で、操作名はpush/popであり、キューとは取出し順が逆になります。選択肢Cは連結リスト(Linked List)の説明です。ポインタによる要素の接続が特徴であり、FIFOやLIFOといった取出し順のルールを持つデータ構造ではありません。


よくある質問(FAQ)

Q. 「優先度付きキュー」とは何ですか?

通常のキューが到着順にデータを取り出すのに対し、優先度付きキュー(Priority Queue)は各データに付けた優先度の高い順に取り出します。OSのプロセススケジューリングでは、リアルタイム処理のように緊急度の高いタスクを先に処理する場合にこの仕組みが使われます。基本情報の科目Bでは優先度付きキューを扱うプログラムが出題された実績があります。

Q. 「リングバッファ」とキューはどんな関係ですか?

リングバッファ(循環バッファ)は、キューを配列で実装するときに使われるテクニックです。配列の末尾に達したら先頭に戻って上書きする構造にすることで、データの移動なしに格納・取出しを繰り返せます。キーボード入力のバッファリングやストリーミング処理など、データが連続的に流れてくる場面で採用されます。

Q. 実務のプログラミングでキューはどのように使いますか?

Webアプリケーションでは「メッセージキュー」として頻繁に使われます。たとえば、ユーザーからの大量の注文リクエストをいったんキューに溜めておき、バックエンドのサーバーが順番に処理する仕組みです。Amazon SQSやRabbitMQといったサービスがこの考え方を実装しています。Pythonではcollections.deque、JavaではLinkedListやArrayDequeがキューの実装として標準提供されています。

Q. ページ置換アルゴリズムの「FIFO」もキューと同じ意味ですか?

原理は同じ「先に入れたものを先に出す」です。仮想記憶のページ置換において、最も古くメモリに読み込まれたページから順に追い出す方式をFIFOページ置換と呼びます。応用情報技術者のR5春 問17やFE H18秋 問27でも出題されており、「データ構造のキュー」と「ページ置換のFIFO」を結びつけて理解しておくと得点源が広がります。