プログラミングの基礎(擬似言語のトレース)
要素数5の整数型の配列 st と整数型の変数 top でスタックを表す。st の要素はすべて0、top は0から始める。push(v) は top に1を加えてから st[top] ← v を行い、pop() は st[top] の値を返してから top から1を引く(st の要素は変えない)。次のプログラムを実行した後の top と st の組はどれか。
push(5)
push(8)
pop()
push(3)
push(9)
pop()
push(7)
pop()
- Atop = 2、st = {5, 3, 0, 0, 0}
- Btop = 2、st = {5, 3, 7, 0, 0}
- Ctop = 5、st = {5, 8, 3, 9, 7}
答えと解説を見る
正解:B. top = 2、st = {5, 3, 7, 0, 0}
push(5)、push(8) で st[1] = 5、st[2] = 8、top = 2 になり、pop() で8を返して top = 1 です。push(3) は st[2] を3で上書きし、push(9) で st[3] = 9、pop() で top = 2 に戻ります。push(7) は st[3] を7で上書きし、最後の pop() で top = 2 になります。pop() は top を減らすだけなので、取り出した7は st[3] に残り、st = {5, 3, 7, 0, 0} です。スタックの中身として有効なのは、st[1]〜st[top] の5と3です。
- A. pop() で要素を0に消すと考えた場合の内容です。pop() は top を減らすだけです。
- B. 正しい。top = 2 で、取り出した7は st[3] に残ります。
- C. pop() で top が減らず、push のたびに後ろへ追加されると考えた場合の内容です。