PUSH命令でスタックにデータを入れ、POP命令でスタックからデータを取り出す。動作中のプログラムにおいて、ある状態から次の順で10個の命令を実行したとき、スタックの中のデータ次のようになった。1番目のPUSH命令でスタックに入れたデータはどれか。
PUSH → PUSH → POP → PUSH → PUSH →
PUSH → PUSH → POP → POP → PUSH
PUSH───┐ ┌──→ POP
↓ │
│ │
├───┤
│192│
├───┤
│ 55│
├───┤
│326│
├───┤
│ 7│
├───┤
│ 29│
├───┤
│ │
ア 29 イ 7 ウ 326 エ 55
イ
PUSH(a)→ PUSH(b) → POP → PUSH(c) → PUSH(d) →
PUSH(e) → PUSH(f) → POP → POP → PUSH(g)
として、スタックの状態を考える。
便宜上スタックの状態を、左から順に表記する。
PUSH(a) ・・・ a
PUSH(b) ・・・ b, a
POP ・・・ a
PUSH(c) ・・・ c, a
PUSH(d) ・・・ d, c, a
PUSH(e) ・・・ e, d, c, a
PUSH(f) ・・・ f, e, d, c, a
POP ・・・ e, d, c, a
POP ・・・ d, c, a
PUSH(g) ・・・ g, d, c, a
従って、10個の命令を実行すると、スタックには4つデータが入り、1番目のPUSH命令でスタックに入れたデータは上から4番目である。
従って、1番目のPUSH命令でスタックに入れたデータは7である。
【別解】
実行した10個の命令を逆に遡ると、以下のとおりとなる。
PUSH ・・・192, 55, 326, 7, 29 (192が入った)
POP ・・・(?), 55, 326, 7, 29 (何かのデータが取り出された)
POP ・・・(□), ?, 55, 326, 7, 29 (何かのデータが取り出された)
PUSH ・・・□, ?, 55, 326, 7, 29
PUSH ・・・?, 55, 326, 7, 29
PUSH ・・・55, 326, 7, 29
PUSH ・・・326, 7, 29
POP ・・・(△), 7, 29 (何かのデータが取り出された)
PUSH ・・・△, 7, 29
PUSH ・・・7, 29 (7が入った)
従って、1番目のPUSH命令でスタックに入れたデータは7である。
問6 | 目次 | 問8 |