基本情報技術者 2015年 春期 午前(科目A) 問05
問題文
キューに関する記述として、最も適切なものはどれか。
選択肢
ア:最後に格納されたデータが最初に取り出される。
イ:最初に格納されたデータが最初に取り出される。(正解)
ウ:添字を用いて特定のデータを参照する。
エ:二つ以上のポインタを用いてデータの階層関係を表現する。
🔒 解説は解答すると表示されます
キュー(FIFO)【午前解説】
正解の理由
正解: イ
キューは「先に格納されたデータが先に取り出される」性質を持つため、選択肢イが正解です。キューは FIFO(First In, First Out)を実現するデータ構造で、待ち行列、タスクスケジューリング、幅優先探索など順序を保持して処理する用途で用いられます。入れる操作(enqueue)と出す操作(dequeue)が分かれており、投入順がそのまま取り出し順になります。
解法ステップ
- 問題文の定義語句(最初/最後、格納、取り出し)に注目する。
- 「最初に格納されたデータが最初に取り出される」→ FIFO → キューを思い浮かべる。
- 他の選択肢をそれぞれデータ構造の特徴と照合して除外する(スタック/添字参照/階層表現)。
- FIFO の説明と一致する選択肢を確定する(イ)。
選択肢別の誤答解説
- ア: 「最後に格納されたデータが最初に取り出される。」
→ これはスタックの説明であり、LIFO(後入れ先出し)を示すためキューの定義とは逆です。 - イ: 「最初に格納されたデータが最初に取り出される。」
→ 正解。キューの定義そのもので、FIFO の特徴を表しています。 - ウ: 「添字を用いて特定のデータを参照する。」
→ 添字参照は配列やランダムアクセス可能な構造の説明であり、キューの基本操作(enqueue/dequeue)とは異なります。 - エ: 「二つ以上のポインタを用いてデータの階層関係を表現する。」
→ これはツリーなどの階層構造の説明で、キューの順序性とは無関係です。
よくある誤解
- 「最後に格納されたものが最初に取り出される」と混同してスタック(LIFO)と取り違える。用途と操作の方向が逆です。
- キュー=配列のように任意参照できると考える誤解。基本操作は端からの入出力で添字による中間参照は想定外です。
- 「ポインタを複数使えばキューの定義になる」と考える誤り。複数ポインタは木構造など階層の表現に使いますが、キューの本質は順序制御です。
補足コラム
キューの実装方法としては配列(循環バッファ)や連結リスト、標準ライブラリの deque などが一般的です。循環バッファは固定長でポインタを循環させるためメモリ効率が良く、連結リストは可変長で要素の追加削除が簡単です。いずれも enqueue/dequeue の平均時間計算量は が目標です。用途例として、プリントジョブ管理、プロセススケジューリング、幅優先探索(BFS)などがあります。
簡単な Python の例(collections.deque を利用):
from collections import deque
q = deque()
q.append('A') # enqueue
q.append('B')
print(q.popleft()) # dequeue -> 'A'
print(q.popleft()) # dequeue -> 'B'
FAQ
Q1: キューとスタックの見分け方は?
A1: 「先に入れたものが先に出る」ならキュー(FIFO)、「最後に入れたものが先に出る」ならスタック(LIFO)です。
A1: 「先に入れたものが先に出る」ならキュー(FIFO)、「最後に入れたものが先に出る」ならスタック(LIFO)です。
Q2: キューで添字アクセスはできる?
A2: 基本的なキュー操作は端からの入出力です。内部実装次第では添字アクセス可能でも、キューの抽象的な性質としては想定しません。
A2: 基本的なキュー操作は端からの入出力です。内部実装次第では添字アクセス可能でも、キューの抽象的な性質としては想定しません。
Q3: 循環キュー(リングバッファ)の利点は?
A3: 固定長バッファでポインタを循環させるため、メモリの連続領域を効率的に使用でき、実装が高速でシンプルです。
A3: 固定長バッファでポインタを循環させるため、メモリの連続領域を効率的に使用でき、実装が高速でシンプルです。
関連キーワード: キュー, FIFO, 先入れ先出し, スタック, LIFO, リングバッファ, deque, データ構造

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

