スタック(stack)
- テクノロジ系
- アルゴリズムとプログラミング
- 基本情報
- 応用情報
- 重要度 ★★★★☆
後に入れたデータから先に取り出すデータ構造。出し入れは片方の端だけで行う。
もう少し詳しい説明
スタックは、後に入れたものから先に取り出すデータのしまい方です。
机の上に書類を積み上げていく様子を思い浮かべてください。上へ上へと積んでいき、取るときも一番上から取ります。真ん中の書類を引き抜くことはしません。出し入れするのは、常に一番上だけです。
この性質を後入先出と呼びます。英語の Last In, First Out から LIFO とも書きます。
積む操作をプッシュ、取り出す操作をポップと呼びます。試験ではこの2語がそのまま問題文に出てきます。
キューとちょうど逆
対になるのがキューです。こちらは先に入れたものから先に出てきます。
| スタック | キュー | |
|---|---|---|
| 出る順 | 積んだ順の逆 | 入れた順のまま |
| 呼び方 | 後入先出(LIFO) | 先入先出(FIFO) |
| 触る場所 | 片方の端だけ | 入口と出口の両端 |
| 身近な例 | 積み上げた書類 | レジの行列 |
試験では、同じ問題文でどちらかを問う形で出ます。「A、B、C を入れて2回取り出した。次は何か」という問いに、スタックなら A、キューなら C と、ちょうど逆の答えになります。最初に「どちらを聞かれているか」を確かめるのが先決です。
何に使われているのか
積んだ順の逆に出てくる、という性質が役に立つ場面があります。代表が処理の呼び出しと戻りです。
ある処理の途中で別の処理を呼ぶと、「終わったらここへ戻る」という戻り先を覚えておく必要があります。呼び出しが入れ子になるほど、戻り先は増えていきます。
ここで大事なのは、最後に呼んだ処理が、最初に戻ってくることです。呼んだ順の逆に戻るので、スタックの性質とぴったり合います。だから戻り先はスタックに積まれます。
この積む場所が足りなくなると、スタックオーバフローという異常になります。自分自身を呼ぶ処理(再帰)で、止まる条件を書き忘れたときに起こる代表的な不具合です。
ほかにも、文書編集の「元に戻す」(直前の操作から順に取り消す)や、逆ポーランド表記法の計算などに使われます。どれも**「直前のものから順に」**という共通点があります。
覚え方:積むか、並ぶか
名前を取り違えたときは、動作の絵を思い浮かべるのが確実です。
- スタック(stack = 積み重ね)→ 縦に積む → 上から取る → 後入先出
- キュー(queue = 順番待ちの列)→ 横に並ぶ → 前から出る → 先入先出
英単語がそのまま形を表しているので、そこへ戻れば迷いません。
試験ではこう出る
科目A(旧・午前)のアルゴリズム分野で頻出です。多いのは、いくつかのデータをプッシュ・ポップした後に取り出されるデータを答えさせる問題で、キューと並べて出されます。プッシュとポップを交互に混ぜて、途中経過を追わせる形もあります。応用情報や科目Bでは、再帰処理の動きや、逆ポーランド表記法の計算をスタックで追う問題として出ます。
操作が混ざった問題は、紙に縦積みを書いて、1操作ずつ足し引きするのが結局いちばん速く確実です。頭の中だけで追うと、3〜4操作目で必ず崩れます。1行増やすたびに一番上が何かを確かめてください。
関連する用語
- キュー
- 先に入れたものから先に出すしまい方。スタックと対になる
- プッシュ・ポップ
- スタックに積む操作がプッシュ、取り出す操作がポップ
- スタックオーバフロー
- 積む場所が足りなくなって起きる異常。戻りきれない呼び出しが続くと起こる
- 再帰
- 処理が自分自身を呼ぶ書き方。戻り先がスタックに積み上がっていく
- 計算量
- データが増えたときに処理時間がどう伸びるかの指標
- 逆ポーランド表記法
- 演算子を後ろに書く式の書き方。スタックがあれば順に計算できる
ミニクイズ
空のスタックに A、B、C の順にデータをプッシュした後、ポップを2回行った。次にポップしたときに取り出されるデータはどれか。
正解は 4番:A
スタックは後入先出(LIFO)なので、取り出される順は積んだ順の逆、つまり C→B→A です。2回ポップした時点で C と B が出ているため、次は A になります。最初に入れた A が最後に出てくる、という点がキューとの決定的な違いです。キューであれば先入先出なので A→B→C の順に出てきて、この問題の答えは C になります。同じ問題文でどちらを問われているかを読み違えると、ちょうど逆の選択肢を選ぶことになるので、まず LIFO か FIFO かを確かめてください。
最終更新:2026-09-16