基本情報技術者 2018年 秋期 午前(科目A) 問05
問題文
待ち行列に対する操作を、次のとおり定義する。
ENQ :待ち行列にデータを挿入する。
DEQ :待ち行列からデータを取り出す。
空の待ち行列に対し、ENQ 1, ENQ 2, ENQ 3, DEQ, ENQ 4, ENQ 5, DEQ, ENQ 6, DEQ, DEQの操作を行った。次にDEQ操作を行ったとき、取り出される値はどれか。
選択肢
ア:1
イ:2
ウ:5(正解)
エ:6
待ち行列の操作(ENQ/DEQ)のシミュレーション【午前2 解説】
要点まとめ
- 結論:待ち行列は FIFO(先入れ先出し)で動作するため、示された一連の操作の後に次のDEQで取り出される値は先頭の5になります。
- 根拠:操作を順にシミュレーションすると最終的にキューに残るのは 5,6 であり、先頭が5なので次のDEQは5になります。
- 差がつくポイント:ENQ/DEQ を順番どおりに追い、各 DEQ で何が取り出されるかを都度書き出す習慣をつけるとミスが減ります。
正解の理由
待ち行列(キュー)は FIFO(先入れ先出し)です。与えられた操作を順に適用すると、最後にキューに残る要素は [5, 6] となり、次の DEQ で取り出されるのは先頭の 5 です。したがって正解は ウ(5)です。
よくある誤解
- DEQ を行った回数を見落として、初期の ENQ がまだ残っていると勘違いする。
- スタック(LIFO)の振る舞いと混同して、最後に入れた要素が先に出ると思い込む。
- 各操作後のキュー状態を記録せずに頭の中だけで追おうとして順序を取り違える。
解法ステップ
- 空のキューから開始。
- ENQ 1 → [1]
- ENQ 2 → [1, 2]
- ENQ 3 → [1, 2, 3]
- DEQ(取り出す) → 1 を取り出す、残り [2, 3]
- ENQ 4 → [2, 3, 4]
- ENQ 5 → [2, 3, 4, 5]
- DEQ → 2 を取り出す、残り [3, 4, 5]
- ENQ 6 → [3, 4, 5, 6]
- DEQ → 3 を取り出す、残り [4, 5, 6]
- DEQ → 4 を取り出す、残り [5, 6]
- 次の DEQ は先頭の 5 を取り出す(よって答えは 5)
選択肢別の誤答解説
- ア: 1 — 最初の DEQ(4番目の操作)で既に取り出されています。よって不正解です。
- イ: 2 — 2 は7番目(DEQ の 2 回目)で取り出されており、最終状態には残っていません。よって不正解です。
- ウ: ウ(5) — 正解。上のシミュレーションのとおり、次の DEQ で取り出されるのは 5 です。
- エ: 6 — 6 はキューの二番目に位置しており、次の DEQ では取り出されません。よって不正解です。
補足コラム
- 実務やプログラミングではキューの ENQ/DEQ は O(1) の操作が期待されます(適切なデータ構造を使う場合)。配列実装では循環バッファ(リングバッファ)を使うと効率的です。
- 本問は「操作列を順に追う」練習問題です。試験対策では操作ごとに紙に書き出すか、左から右へ時系列を書いて状態遷移を確認すると確実です。
FAQ
Q: DEQ を空のキューで行ったらどうなる?
A: アンダーフロー(取り出せる要素がない)でエラーになります。試験問題では通常そのような操作は与えられませんが、注意が必要です。
A: アンダーフロー(取り出せる要素がない)でエラーになります。試験問題では通常そのような操作は与えられませんが、注意が必要です。
Q: スタックとキュー、どちらを想定すればよい?
A: 本問は「待ち行列(キュー)」なので FIFO を想定します。問題文の用語(待ち行列, ENQ, DEQ)をまず確認してください。
A: 本問は「待ち行列(キュー)」なので FIFO を想定します。問題文の用語(待ち行列, ENQ, DEQ)をまず確認してください。
Q: 途中の DEQ がどれを取り出したか忘れたときは?
A: 最初から順に ENQ/DEQ を紙に書き、各操作の後のキュー状態を明示すると間違いが減ります。
A: 最初から順に ENQ/DEQ を紙に書き、各操作の後のキュー状態を明示すると間違いが減ります。
関連キーワード: 待ち行列、キュー、FIFO、ENQ、DEQ、シミュレーション、データ構造、リングバッファ、アルゴリズム、操作列追跡

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

