基本情報技術者 平成31年度春期午前問6

午前問6

三つのスタックA、B、Cのいずれの初期状態も[1、2、3]であるとき、再帰的に定義された関数f()を呼び出して終了した後のBの状態はどれか。ここで、スタックが、[a1 a2、…、an-1]の状態のときにanをpushした後のスタックの状態は[a1 a2、…、an-1、an]で表す。

f(){
 Aが空ならば{
  何もしない。
 } そうでない場合{
  Aからpopした値をCにpushする。
  f()を呼び出す。
  Cからpopした値をBにpushする。
 }
}
[1、2、3、1、2、3]
[1、2、3、3、2、1]
[3、2、1、1、2、3]
[3、2、1、3、2、1]
『情報処理過去問.com』からiPhoneアプリがリリースされました!!

正解

解説

スタック(stack)とは、最後に入力したデータが先に出力されるという特徴をもつデータ構造の一種で、このようなデータの入出力方式を「LIFO(Last In, First Out)」と呼びます。

f()にA,B,Cを当てはめると
①Aは空ではないので、Aからpopした値をCにpushする。
A[1,2,3]
B[1,2,3]
C[1,2,3]

A[1,2]
B[1,2,3]
C[1,2,3,3]

②Aは空ではないので、Aからpopした値をCにpushする。
A[1,2]
B[1,2,3]
C[1,2,3,3]

A[1]
B[1,2,3]
C[1,2,3,3,2]

③Aは空ではないので、Aからpopした値をCにpushする。
A[1]
B[1,2,3]
C[1,2,3,3,2]

A[]
B[1,2,3]
C[1,2,3,3,2,1]

④Aは空なので、Cからpopした値をBにpushする。
A[]
B[1,2,3]
C[1,2,3,3,2,1]

A[]
B[1,2,3,1]
C[1,2,3,3,2]

⑤Aは空なので、Cからpopした値をBにpushする。
A[]
B[1,2,3,1]
C[1,2,3,3,2]

A[]
B[1,2,3,1,2]
C[1,2,3,3]

⑥Aは空なので、Cからpopした値をBにpushする。
A[]
B[1,2,3,1,2]
C[1,2,3,3]

A[]
B[1,2,3,1,2,3]
C[1,2,3]

よってBの状態は[1,2,3,1,2,3]となります。
スポンサーリンク







シェアする

  • このエントリーをはてなブックマークに追加

フォローする