IT基礎・コンピュータの用語一覧へ
このページの目次

スタックとは?

読み方:スタック

最終更新:2026/08/18

3秒でわかる

最後に入れたものを最初に取り出すデータ構造。積んだ順に戻る性質を使い、関数の呼び出し管理や取り消し操作、括弧の対応確認に使われます。

30秒図解

スタックはa、b、cの順に積むと、popで最後のcが最初に出て、次の一番上はbになる
スタックは「直前に戻る」処理を、積む順番と取り出す順番で表せます。

もう少し詳しく

どういうものか

スタックは、データを積み上げて、上から順に取り出すデータ構造です。積む操作を push、取り出す操作を pop と呼びます。取り出せるのは常に一番上、つまり最後に入れた要素です。この性質を LIFO(Last In First Out、後入れ先出し)と言います。

途中の要素を直接抜くことはできません。制限が強い代わりに、実装が単純で、push と pop はどちらも O(1) で終わります。

なぜ必要か

「直前に戻る」処理は、そのままスタックの形になります。関数を呼ぶと現在地を積み、終わったら取り出して戻る。エディタの取り消しは、操作を積んでおいて上から戻す。ブラウザの戻るボタンも同じです。

プログラムの実行中に出る RecursionErrorStackOverflowError は、この積み上げ場所が上限を超えた状態です。スタックを知っていると、エラーメッセージの意味がそのまま読めます。

具体例

stack = [] stack.append("a") # push stack.append("b") stack.append("c") print(stack.pop()) # c 最後に入れたものが出る print(stack[-1]) # b 取り出さずに一番上を見る (peek) def is_balanced(text): pairs = {")": "(", "]": "[", "}": "{"} stack = [] for ch in text: if ch in "([{": stack.append(ch) elif ch in pairs: if not stack or stack.pop() != pairs[ch]: return False return not stack print(is_balanced("a(b[c]{d})")) # True print(is_balanced("a(b[c)]")) # False

括弧の対応確認は、スタックが最も自然に効く例です。

つまずきやすいところ

  • 空のスタックから取り出す — Python では IndexError になります。pop の前に空かどうかを確かめます

  • キューと取り違える — 先に入れたものから処理したい場面でスタックを使うと、順序が逆になります

  • リストの先頭を使って実装するlist.pop(0) は要素をずらすため O(n) です。末尾を使うか collections.deque を使います

  • 再帰の深さを甘く見る — Python の既定の上限は約 1000 段です。深い探索は自前のスタックによる反復に書き換えます
  • 似た用語との違い

    構造取り出す順主な用途
    スタック後入れ先出し呼び出し管理、取り消し、括弧照合
    キュー先入れ先出し順番待ち、幅優先探索
    優先度付きキュー優先度の高い順最短経路、スケジューリング


    覚え方

    食堂の重ねたトレーです。最後に置いたトレーが一番上にあり、次に取られるのもそれです。

    次に学ぶ

    キューとは?

    知識のつながり

    サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

    現在地スタックIT基礎

    LEARN BY DOING

    この用語を、教材で使ってみる

    直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

    この用語を扱うコース

    コース

    コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB

    135レッスン
    コース

    アルゴリズム道場 カメ師範の十の巻

    10レッスン
    コース

    コンピューターサイエンス入門:理論編

    53レッスン
    コンピュータサイエンスコースの全編を見る