【すたっく】

スタック とは?

最終更新:
💡 「後から積んだお皿から取り出す」積み上げ型のデータ管理

データを後入れ先出し(LIFO)で管理するデータ構造。積んだお皿を上から取るように、最後に追加した要素から先に取り出す。関数の呼び出し管理などに使われる。

📌 このページのポイント
スタック:最後に積んだCが先に出る 最初 A B push(C) 後 A B pop() 後 A B C C 取り出した値はC 後入れ先出し(LIFO)
同じスタックの時間順の変化です。青のA・Bは残り、最後に積んだ緑のCが先に取り出されます。
ひよこ ひよこ
スタックって何?
ペンギン先生 ペンギン先生
お皿を積み上げるようにデータを扱う仕組みだよ。追加する操作をpush、取り出す操作をpopと呼ぶ。A、Bの順に積んでからCを追加すると、次のpopで取り出すのはCになるんだ。
ひよこ ひよこ
最初に入れたAはいつ出るの?
ペンギン先生 ペンギン先生
その上にあるものを取り出した後だよ。C、B、Aの順になる。この「後入れ先出し」がLIFO。空のスタックから取り出そうとしたときの扱いは、使う実装やAPIで確認しよう。
ひよこ ひよこ
コールスタックって聞いたことがある!
ペンギン先生 ペンギン先生
関数の実行位置や呼び出し関係を管理する仕組みだよ。ある関数が別の関数を呼ぶと、その情報が積まれ、呼ばれた関数が終わると元の処理へ戻る。深い再帰などで使える領域を超えると、スタックオーバーフローが起こり得るんだ。
ひよこ ひよこ
「元に戻す」にも使える?
ペンギン先生 ペンギン先生
操作を記録して逆順に取り消す考え方に使えるよ。たとえばQtのQUndoStackは、文書への操作を保持してundoとredoを提供する。やり直しや現在位置の管理も必要なので、単に履歴を捨てるだけの仕組みとは限らないんだ。
ひよこ ひよこ
キューや技術スタックとは何が違う?
ペンギン先生 ペンギン先生
キューの基本は、先に入れたものから取り出すFIFO。スタックとは順番が逆だよ。一方「技術スタック」は、アプリで組み合わせて使う技術のこと。名前に同じ「積み重ね」が使われても、LIFOでデータを取り出す意味ではないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「スタック」って出てきたら「後から積んだデータから先に取り出す仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Stack」 = 積み重ね・積み上げたもの
💬 英語で「積み上げた山」を意味する。皿を積み上げて一番上から取るイメージがそのまま名前になっているよ

参考資料

← 用語集にもどる