次の二つのスタック操作を定義する。
PUSH n: スタックにデータ(整数値n)をプッシュする。
POP: スタックからデータをポップする。
空のスタックに対して,次の順序でスタック操作を行った結果はどれか。
PUSH 1 → PUSH 5 → POP → PUSH 7 → PUSH 6 → PUSH 4 → POP → POP → PUSH 3
正答3
解説
正解は3です。
スタックは、最後に入れたデータを最初に取り出すLIFO(Last In First Out:後入れ先出し)のデータ構造です。
操作を順にたどり、最後に残る内容を上から読み取ります。
図の選択肢は、いずれも3段に積まれたスタックの絵で、上の段がスタックの上位です。
【操作のたどり方】
PUSH 1で、スタックは下から1になります。
PUSH 5で、下から1、5になります。
POPで一番上の5が取り出され、1だけが残ります。
PUSH 7、PUSH 6、PUSH 4で、下から1、7、6、4になります。
POPで4が、次のPOPで6が取り出され、下から1、7になります。
PUSH 3で、下から1、7、3になります。
上から読むと3、7、1です。
【選択肢別解説】
1:× 上から1、7、3は、最終状態を下から読んだ順序です。
上から読むと3、7、1になります。
2:× 上から3、4、6は、取り出されたはずの4と6が残っています。
POPでは最後に入れた4、次に6の順で取り出されます。
3:○ 最終状態を上から読んだ3、7、1と一致します。
4:× 上から6、4、3は、残るはずの1と7がなく、取り出された4と6が残っているので誤りです。
【ポイント】
スタックはLIFO、キューはFIFO(First In First Out:先入れ先出し)です。
操作のたびにスタックの中身を書き出すと、取り違えを防げます。