応用情報技術者 2011年 春期 午前2 問07
問題文
PUSH 命令でスタックにデータを入れ、POP 命令でスタックからデータを取り出す。動作中のプログラムにおいて、ある状態から次の順で10個の命令を実行したとき、スタックの中のデータは図のようになった。1番目の PUSH 命令でスタックに入れたデータはどれか。

選択肢
ア:29
イ:7(正解)
ウ:326
エ:55
PUSH命令とPOP命令の動作解析【午前2 解説】
要点まとめ
- 結論:最初にPUSHしたデータは「7」である。
- 根拠:スタックはLIFO(後入れ先出し)構造で、命令の順序と最終状態から逆算できる。
- 差がつくポイント:PUSHとPOPの操作順序を正確に追い、スタックの変化を丁寧にシミュレーションする力が問われる。
正解の理由
スタックは後入れ先出しのため、命令の実行順にPUSHとPOPを追い、最終的なスタックの状態(上から192, 55, 326, 7, 29)と照合すると、最初にPUSHされたデータは「7」であることがわかります。
この問題は、命令の流れを正確に追い、どのデータがどのタイミングでスタックに入れられ、取り出されたかを理解することが重要です。
この問題は、命令の流れを正確に追い、どのデータがどのタイミングでスタックに入れられ、取り出されたかを理解することが重要です。
よくある誤解
スタックの動作を単純に「最初に入れたものが一番下」と誤解し、操作順序を無視してしまうことがあります。
また、POP命令で取り出されたデータを考慮せずに最終状態だけで判断するのも誤りです。
また、POP命令で取り出されたデータを考慮せずに最終状態だけで判断するのも誤りです。
解法ステップ
- スタックの初期状態を空と仮定する。
- 命令の順にPUSHとPOPを実行し、スタックの状態を逐次更新する。
- PUSH命令では新しいデータをスタックの上に積む。
- POP命令ではスタックの一番上のデータを取り出す。
- 最終的なスタックの状態と照合し、どのデータがどのタイミングで入ったかを逆算する。
- 最初にPUSHされたデータを特定する。
選択肢別の誤答解説
- ア: 29
最下部にあるが、最後にPUSHされた可能性が高く、最初ではない。 - イ: 7
正解。操作の流れから最初にPUSHされたデータである。 - ウ: 326
中間に位置し、途中でPUSHされたデータであり最初ではない。 - エ: 55
上から2番目にあり、途中でPUSHされたデータで最初ではない。
補足コラム
スタックはLIFO構造で、プログラムの関数呼び出しや戻りアドレスの管理に使われます。PUSH命令はデータを積み、POP命令は積んだデータを取り出すため、操作の順序を正確に理解することが重要です。
この問題は、スタックの基本動作を理解し、命令の流れを追う力を養う良い練習になります。
この問題は、スタックの基本動作を理解し、命令の流れを追う力を養う良い練習になります。
FAQ
Q: スタックの最初に入れたデータは必ず一番下にあるのですか?
A: はい、LIFO構造のため最初に入れたデータは一番下に位置しますが、途中のPOP命令で取り出される場合もあります。
A: はい、LIFO構造のため最初に入れたデータは一番下に位置しますが、途中のPOP命令で取り出される場合もあります。
Q: POP命令で取り出したデータはどこに行くのですか?
A: POP命令はスタックの一番上のデータを取り出し、スタックから削除します。取り出したデータは通常、CPUのレジスタなどに移されます。
A: POP命令はスタックの一番上のデータを取り出し、スタックから削除します。取り出したデータは通常、CPUのレジスタなどに移されます。
関連キーワード: スタック、PUSH命令、POP命令、LIFO, データ構造、命令解析

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

