後入れ先出し(LIFO:Last-In First-Out)。最後に入れたものが最初に出る。 イメージは「積み上げた本」や「バネ式の皿入れ」。
Q1(H22春 問5 / H16春・H29秋でも出題)★頻出
A, B, C, D の順に到着するデータに対して、一つのスタックだけを用いて出力可能なデータ列はどれか。
正解:ウ(C, B, D, A)
各選択肢を、「push で積む/pop で出す」を実際になぞって確かめる。
push A, push B, push C スタック:[A,B,C](上=C) pop → C 出力: C pop → B 出力: C,B push D スタック:[A,D](上=D) pop → D 出力: C,B,D pop → A 出力: C,B,D,A ✓
なぜ他はダメか(先に積んだものは後でしか出せないが判定基準):
▼速解法:「先に入れた文字は、後に入れた文字より先には出てこられない」。"A が早く出てくる" 選択肢は疑ってかかる(Aは最初に積まれるので普通は最後)。
Q2 ★push/pop のトレース
空のスタックに対し、次の操作を順に行う。取り出される(pop される)順はどれか。
push(1), push(2), pop, push(3), pop, pop
| 操作 | スタック(右が上) | 出力 |
|---|---|---|
| push(1) | 1 | |
| push(2) | 1, 2 | |
| pop | 1 | 2 |
| push(3) | 1, 3 | 2 |
| pop | 1 | 2, 3 |
| pop | (空) | 2, 3, 1 |
Q3 ★逆ポーランド記法(後置記法)とスタック
数式 3 4 + 5 ×(後置記法)をスタックで計算した結果はいくつか。
正解:ウ(35)
後置記法は「数字はスタックに積む/演算子が来たら上2つを取り出して計算し、結果を積む」。
+ → 3+4=7 を積む → [7]× → 7×5=35 → [35]電卓・コンパイラの式計算は、このスタックの後入れ先出しを利用している。
A B + → A + B の関係(演算子を2項の間にはさむ)だけ覚えればOK。3 4 + → 3+4=7、続く 7 5 × → 7×5=35。
▼ 解説つきの類題を探す:過去問道場・分野別「データ構造」