問題プレビューID: 147a4072

問 5

スタック 1,2 があり,図の状態になっている。関数 f はスタック 1 からポップしたデータをそのままスタック 2 にプッシュする。関数 g はスタック 2 からポップしたデータを出力する。b, c, d, a の順番に出力するためには,関数をどの順で実行すればよいか。

解説

スタック 1 の内容は上から a, b, c, d である。b, c, d, a の順に出力する手順は次のとおり。

  1. f で a をスタック 2 へ移す(スタック 1: b, c, d/スタック 2: a)
  2. f で b をスタック 2 へ移す(スタック 1: c, d/スタック 2: a, b)
  3. g で b を出力する
  4. f で c をスタック 2 へ移す(スタック 1: d/スタック 2: a, c)
  5. g で c を出力する
  6. f で d をスタック 2 へ移す(スタック 1: 空/スタック 2: a, d)
  7. g で d を出力する
  8. g で a を出力する

したがって f, f, g, f, g, f, g, g となり,正解は「イ」である。