基本情報技術者 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操作【午前解説】
正解の理由
待ち行列(キュー)はFIFO(先入れ先出し)です。与えられた操作を順に適用すると、最後にキューに残る要素は [5, 6] となり、次のDEQで取り出されるのは先頭の5です。したがって正解は ウ(5)です。
解法ステップ
- 空のキューから開始。
- 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では取り出されません。よって不正解です。
よくある誤解
- DEQを行った回数を見落として、初期のENQがまだ残っていると勘違いする。
- スタック(LIFO)の振る舞いと混同して、最後に入れた要素が先に出ると思い込む。
- 各操作後のキュー状態を記録せずに頭の中だけで追おうとして順序を取り違える。
補足コラム
- 実務やプログラミングではキューの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、シミュレーション、データ構造、リングバッファ、アルゴリズム、操作列追跡

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

