基本情報技術者 2009年 秋期 午前(科目A) 問05
問題文
空のスタックに対して次の操作を行った場合、スタックに残っているデータはどれか。ここで、“push ”はスタックへデータを格納し、“pop”はスタックからデータを取り出す操作を表す。
push 1 → push 2 → pop → push 3 → push 4 → pop → push 5 → pop
選択肢
ア:1と3(正解)
イ:2と4
ウ:2と5
エ:4と5
空のスタックに対する一連の操作の結果【午前2 解説】
要点まとめ
- 結論:与えられた一連の操作後にスタックに残るのは、最初にpushした1と続いて残った3の二つ、すなわち選択肢アです。操作を順に追えば確実です。
- 根拠:スタックはLIFO(後入れ先出し)であり、各popは直前にpushされた要素を取り出すため、この順序で2・4・5が取り除かれます。
- 差がつくポイント:操作を紙に書いて「トップ」を常に示しながら追うか、コインなどでpush/popを模擬して可視化すると早く正確に解けます。
正解の理由
正解: ア
理由はスタックの動作(LIFO)に従って操作を左から順に追うと明確です。操作ごとのスタック状態を示します(左端が底、右端がトップ):
理由はスタックの動作(LIFO)に従って操作を左から順に追うと明確です。操作ごとのスタック状態を示します(左端が底、右端がトップ):
- push 1 → [1]
- push 2 → [1, 2]
- pop → [1] (2 が取り出される)
- push 3 → [1, 3]
- push 4 → [1, 3, 4]
- pop → [1, 3] (4 が取り出される)
- push 5 → [1, 3, 5]
- pop → [1, 3] (5 が取り出される)
最終的に残るのは1と3であり、選択肢アが正解です。
よくある誤解
- 「popは最初に入れた要素を取り出す(FIFO)」と勘違いしてキューと混同することがよくあります。
- 操作をまとめて考えて「どれだけpushされたか」だけで判断し、順序を追わないミスも多いです。
解法ステップ
- 問題文の操作を左から順に読む。
- スタックの性質がLIFO(後入れ先出し)であることを確認する。
- 各操作ごとにスタックの中身を更新してメモする(トップがどれかを意識)。
- 最後の操作まで追って残った要素を答える。
選択肢別の誤答解説
- ア: 正解。上の追跡で最終的に残るのは1と3であり一致します。
- イ: 2と4は、それぞれ最初と中盤のpopで取り出されるため選べません。
- ウ: 2は最初のpopで既に取り出され、5も最後のpopで取り除かれるため誤りです。
- エ: 4は中盤のpopで取り出され、5もその後のpopで取り除かれるため残りません。
補足コラム
- スタックはデータ構造の基本で、関数呼び出しの戻り先管理や逆ポーランド記法の評価、括弧の整合性チェックなど多くの場面で使われます。
- push/popの操作はいずれも平均してO(1)で実行できます(配列やリンクドリストで実装した場合)。
- 問題を解く際は、実体的にコインや付箋で「積む/取り出す」を試すと直感的に理解できます。
FAQ
Q: スタックとキューの違いは何ですか?
A: スタックはLIFO(後入れ先出し)、キューはFIFO(先入れ先出し)で取り出す順序が異なります。
A: スタックはLIFO(後入れ先出し)、キューはFIFO(先入れ先出し)で取り出す順序が異なります。
Q: 複数のpopが連続するときはどう追えばよいですか?
A: 連続するpopはその都度最新のトップ要素を取り出すので、順にスタックの右端を削るイメージで追ってください。
A: 連続するpopはその都度最新のトップ要素を取り出すので、順にスタックの右端を削るイメージで追ってください。
Q: 操作が長くても手で追うコツはありますか?
A: トップだけをメモする(例えば「現在のトップはX」)か、付箋で模擬して視覚的に操作するとミスが減ります。
A: トップだけをメモする(例えば「現在のトップはX」)か、付箋で模擬して視覚的に操作するとミスが減ります。
関連キーワード: スタック、LIFO、push、pop、データ構造、トレース、アルゴリズム、逆ポーランド記法、括弧チェック

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

