平成23年度 特別 午前 問7
基礎理論
スタックに入れたデータ
PUSH 命令でスタックにデータを入れ,POP 命令でスタックからデータを取り出す。動作中のプログラムにおいて,ある状態から次の順で 10 個の命令を実行したとき,スタックの中のデータは図のようになった。1 番目の PUSH 命令でスタックに入れたデータはどれか。
〔命令の順序〕原典は矢印でつないだ 2 行。上の行の右端から下の行の左端へ折り返す。
PUSH → PUSH → POP → PUSH → PUSH →
PUSH → PUSH → POP → POP → PUSH
〔スタックの中のデータ〕原典は縦に積んだ枠の絵。PUSH は上の口から入れ,POP は同じ口から取り出す。
PUSH ──┐ ┌──→ POP
↓ │
┌───────┐
│ 192 │ ← 口にいちばん近い(最後に入れた)
│ 55 │
│ 326 │
│ 7 │
│ 29 │
│ │ ← 枠はさらに下へ続く(実行前から入っていたデータ)
└───────┘- ア29
- イ7
- ウ326
- エ55
答えと解説を見る
✓ これが正解イ7
解説
最初に入れたデータは残った4個の底にある7です。
十個の命令を順になぞるのが遠回りに見えて、いちばん確実です。ただし図の数値をいきなり当てはめると混ざりますので、入れたデータには、何番目の命令で積んだかで仮の名前を付けて追いかけます。スタックは同じ口から出し入れしますから、プッシュで積んだものの上にさらに積まれ、ポップでは口にいちばん近いものから外れていきます。命令の並びは、二回積んで一回外し、続けて四回積んで二回外し、最後にもう一回積む形です。この順でなぞると、一つ目の命令で積んだものはずっと外れずに残り、二つ目の命令で積んだものは三つ目の命令で外れます。四つ目と五つ目の命令で積んだものは残り、六つ目と七つ目の命令で積んだものは後半の二回の取り出しで外れます。最後の命令で積んだものが口にいちばん近くなります。結局、この十命令で新しく積み上がったのは四個です。図の枠は口に近い側が上に描かれていますから、上から順に、最後の命令で積んだもの、五つ目の命令で積んだもの、四つ目の命令で積んだもの、そして一つ目の命令で積んだものが並びます。上から四つ目の値が7ですので、これが最初に入れたデータです。数だけでも裏が取れます。積む命令が七回、取り出す命令が三回ですから差し引き四個が新しく増えた分で、五つ目の値はそれより前から入っていたことになります。設問がある状態からと断っている以上、枠の底が最初とは限りません。
ほかの選択肢はなぜ違うのか
- ア29:枠の最も下に見える値ですが、差し引き四個しか積まれていないので、これは十命令が始まる前から入っていたものです。底にあるから最初という読み方を誘う位置に置かれています。
- ウ326:上から三つ目にある値で、四つ目の命令で積まれたものに当たります。二つ目に積んだものが直後に取り出されたため、残った並びでは早い位置に見えています。
- エ55:上から二つ目にある値で、五つ目の命令で積まれたものです。この後に積まれた二個が後半の取り出しで外れたので、最後の一個のすぐ下に繰り上がっています。
出典:平成23年度 特別 応用情報技術者試験 午前 問7
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)