平成23年度 特別試験 応用情報技術者試験 午前 問7
PUSH命令でスタックにデータを入れ,POP命令でスタックからデータを取り出す。動作中のプログラムにおいて,ある状態から次の順で10個の命令を実行したとき,スタックの中のデータは図のようになった。1番目のPUSH命令でスタックに入れたデータはどれか。

キーボード:1〜4 で解答 → 次の問題 ← 前の問題
正解と解説を見る
解答する前に解説を開いたので、この問題は「見て解いた」として記録します(正解数には入りません)。
正解:イ
スタックは後入れ先出し(LIFO)です。図では上から入れて上から取り出すので,一番下の29が最も古いデータです。
命令は PUSH, PUSH, POP, PUSH, PUSH, PUSH, PUSH, POP, POP, PUSH の順で,PUSHが7回,POPが3回なので,データは差し引き4個増えます。最終的に5個あるので,命令実行前から1個(一番下の29)が入っていたことになります。
入れたデータをx1〜x7として追跡します(左が底)。
- PUSH x1 → [29, x1]
- PUSH x2 → [29, x1, x2]
- POP → [29, x1](x2が取り出される)
- PUSH x3 → [29, x1, x3]
- PUSH x4 → [29, x1, x3, x4]
- PUSH x5 → [29, x1, x3, x4, x5]
- PUSH x6 → [29, x1, x3, x4, x5, x6]
- POP → [29, x1, x3, x4, x5]
- POP → [29, x1, x3, x4]
- PUSH x7 → [29, x1, x3, x4, x7]
これを図(下から29, 7, 326, 55, 192)と照らし合わせると,x1=7,x3=326,x4=55,x7=192 です。
-
ア: 29
誤り。29は10個の命令を実行する前からスタックの底にあったデータです。 -
イ: 7
正しい。1番目のPUSHで入れたデータは,底の29のすぐ上に残っている7です。 -
ウ: 326
誤り。326は4番目の命令(3回目のPUSH)で入れたデータです。 -
エ: 55
誤り。55は5番目の命令(4回目のPUSH)で入れたデータです。
答え
イ: 7
出典:平成23年度 特別試験 応用情報技術者試験 午前 問7