スタック1,2があり,図の状態になっている。
関数fはスタック1からポップしたデータをそのままスタック2にプッシュする。
関数gはスタック2からポップしたデータを出力する。
b,c,d,aの順番に出力するためには,関数をどの順で実行すればよいか。
正答2
解説
正解は2です。
図では、スタック1に上からa、b、c、dの順でデータが積まれ、スタック2は空です。
ポップできるのは、常に一番上のデータだけです。
fはスタック1の先頭をスタック2へ移し、gはスタック2の先頭を出力します。
【選択肢別解説】
1:× f、fでaとbを移し、gでbを出力します。
続くf、fでcとdを積むと、スタック2は上からd、c、aとなります。
残りのg、g、gでd、c、aの順に出力され、結果はb、d、c、aです。
2:○ f、fでaとbを移すと、スタック2は上からb、aになり、gでbを出力します。
fでcを積んでgでcを出力し、fでdを積んでgでdを出力します。
最後のgで残ったaを出力し、b、c、d、aの順になります。
3:× b、cまで出力したあと、次のgでaを出力してしまいます。
そのあとf、gでdを出力するので、結果はb、c、a、dです。
4:× 最初のf、f、g、gで、b、aの順に出力されます。
その後cとdを積んでから出力するので、結果はb、a、d、cです。
【ポイント】
スタックは後入れ先出し(LIFO:Last In First Out)のデータ構造です。
操作列を1つずつ追い、各時点のスタックの中身を書き出すと確実に判定できます。