修了試験 2020-01-26実施分 基本情報技術者試験 問8
PUSH命令でスタックにデータを入れ,POP命令でスタックからデータを取り出す。 動作中のプログラムにおいて,ある状態から次の順で10個の命令を実行したとき,スタックの中のデータは図のようになった。 1番目のPUSH命令でスタックに入れたデータはどれか。 PUSH → PUSH → POP → PUSH → PUSH → PUSH → PUSH → POP → POP → PUSH

正答2
解説
正解は2です。 スタックは後入れ先出し(LIFO:Last In First Out)のデータ構造です。 10個の命令の実行後に図の状態になったことから、1番目のPUSHで入れたデータを逆算する問題です。 【計算】 図のスタックは、底から順に29、7、326、55、192が積まれており、最上段は192です。 命令はPUSHが7回、POPが3回なので、データは差し引き4個増えています。 実行後に5個あるので、実行前から1個(底の29)が入っていたことになります。 29だけの状態から1番目のPUSHでx1を積むと、29、x1になります。 2番目のPUSHでx2を積み、続くPOPでx2が取り出されます。 次の4回のPUSHでx3〜x6を積み、2回のPOPでx6とx5が取り出されます。 最後のPUSHでx7を積むと、底から29、x1、x3、x4、x7になります。 図と照らし合わせると、x1は底から2番目の7です。 【選択肢別解説】 1:× 29は、命令の実行前からスタックの底に入っていたデータです。 10個の命令でPUSHしたものではありません。 2:○ 上の追跡のとおり、1番目のPUSHのデータは一度も取り出されず、底から2番目に残ります。 それが7です。 3:× 326は底から3番目で、3番目のPUSH(POPの直後のPUSH)で入れたデータです。 4:× 55は底から4番目で、4番目のPUSHで入れたデータです。 【ポイント】 スタックの問題は、PUSHとPOPの回数差から最初の個数を求め、1命令ずつ状態を書き出すと確実に解けます。まとめて解く
修了試験 2020-01-26実施分を通しで解く(80問)→