平成23年度 秋期 基本情報技術者試験 午前 問5
テクノロジ/アルゴリズムスタック1,2があり,図の状態になっている。関数fはスタック1からポップしたデータをそのままスタック2にプッシュする。関数gはスタック2からポップしたデータを出力する。b,c,d,aの順番に出力するためには,関数をどの順で実行すればよいか。

出典:平成23年度 秋期 基本情報技術者試験 午前 問5
- アf, f, g, f, f, g, g, g
- イf, f, g, f, g, f, g, g
- ウf, f, g, f, g, g, f, g
- エf, f, g, g, f, f, g, g
正解:イ
解説
スタック1は上からa,b,c,dの順に積まれており,関数fで1回ポップするたびに上から順にa,b,c,dが取り出されてスタック2に積まれます。b,c,d,aの順で出力するには,まずa,bをポップしてスタック2に積み(この時点でスタック2は上からb,a),gでbを出力,続けてcをポップして積み,gでcを出力,dをポップして積み,gでdを出力,最後にgでaを出力する,という手順になります。これを関数の並びで表すとf, f, g, f, g, f, g, gとなります。
選択肢ごとの解説
- ア誤り。この順序では最初にa,b,cを連続でポップしてしまい,出力順がb,c,d,aとはなりません。
- イ正しい。f,f,g,f,g,f,g,gの順に実行すると,スタック2からb→c→d→aの順に出力されます。
- ウ誤り。g,gが連続する位置があり,スタック2に積まれたデータの順序と合わず,指定の出力順になりません。
- エ誤り。f,fの後にg,gと連続してポップすると,出力順がb,a,…となってしまい,指定の順序と一致しません。