メインコンテンツへ
アルゴリズムとプログラミング

空のスタックに対して次の順序で操作を行った。push(1), push(2), pop, push(3), push(4), pop, push(5), pop, pop。すべての操作後、スタックに残っている要素を底から順に並べたものはどれか。

ア.1, 3, 5
イ.1, 2, 3
ウ.1, 5
エ.1正解

解説

スタックは「お皿の積み重ね」。pushは上に乗せる、popは一番上を取る——LIFO(後入れ先出し)。1ステップずつ紙に書くのが最強の解法。頭の中で巻き戻すと必ず事故ります。

なぜ エ が正解か

エが正解。1操作ずつトレース(底→上の順で表記):①push(1) → [1]、②push(2) → [1,2]、③pop(2が出る)→ [1]、④push(3) → [1,3]、⑤push(4) → [1,3,4]、⑥pop(4が出る)→ [1,3]、⑦push(5) → [1,3,5]、⑧pop(5が出る)→ [1,3]、⑨pop(3が出る)→ [1]。最終的にスタックには1だけが残る。

なぜ ア は間違いか

1, 3, 5 はステップ⑦の途中状態。最後の2回のpopを実行し忘れた中間結果。「すべての操作後」という設問条件を見落とさない。

なぜ イ は間違いか

1, 2, 3 は操作内容を取り違えた結果。pop操作を無視してpushだけ集計するとこうなる。

なぜ ウ は間違いか

1, 5 は最後のpop(⑨)を忘れた結果。トレース表を最後まで完走することが肝心。

出典: AI生成問題(学習用)