応用情報技術者試験 |
2011年度 = 平成23年度・春期 |
午前 |
問7 |
PUSH命令でスタックにデータを入れ、POP命令でスタックからデータを取り出す。動作中のプログラムにおいて、ある状態から次の順で10個の命令を実行したとき、スタックの中のデータは図のようになった。1番目のPUSH命令でスタックに入れたデータはどれか。
イ
スタック(stack)は、データをLIFO(Last-In First-Out)で蓄えます。ちょうど、机の上に重ねた皿のように、最も上に重ねた皿を優先的に取り出すのと同様です。
データを入れる操作をプッシュ(push)、データを取り出す操作をポップ(pop)といいます。
本問では、スタックに対してPUSH→PUSH→POP→PUSH→PUSH→PUSH→PUSH→POP→POP→PUSHという10個の操作が行われています。最後にPUSHされたデータが192であることが分かりますので、最初の9個の操作を考えましょう。
①PUSH→②PUSH→③POP→④PUSH→⑤PUSH→⑥PUSH→⑦PUSH→⑧POP→⑨POP
⑦でPUSHされたデータは⑨でPOPされ、⑥でPUSHされたデータは⑧でPOPされます。⑥と⑦でPUSHされたデータはスタックから取り出されるわけですから、上の9個の操作は、実質的に、以下の5個の操作と同等とみなせます。
①PUSH→②PUSH→③POP→④PUSH→⑤PUSH
ここで、②でPUSHされたデータは③でPOPされ、スタックから取り出されます。したがって、上に示す5個の操作は、実質的に、以下の3個の操作と同等と見なせます。
①PUSH→④PUSH→⑤PUSH
与えられた図と見比べると、⑤は55をPUSHして、④は326をPUSHして、①は7をPUSHすることが分かります。よって、正解はイです。