【すたっく】

スタック とは?

💡 「後から積んだお皿から取り出す」積み上げ型のデータ管理
📌 このページのポイント
LIFO:後入れ先出し 要素1(最初) 要素2 要素3 要素4(最後) TOP 要素5 (追加) Push 要素4 (取出) Pop 追加する順 取り出す順 用途例:関数コールスタック・Undo操作・ブラウザの戻るボタン
最後に入れたものが最初に取り出せるデータ構造
ひよこ ひよこ

スタックって何?

ペンギン先生 ペンギン先生

「後から入れたものを先に取り出す」データ構造だよ。お皿を積み上げるイメージで、一番上に乗せたお皿しか取れない。プログラムでは「push(追加)」と「pop(取り出し)」という操作で使うんだ。

ひよこ ひよこ

どんな場面で使われるの?

ペンギン先生 ペンギン先生

一番身近なのはブラウザの「戻る」ボタン。訪れたページを順にスタックに積んでいって、「戻る」を押すたびに一番上(最後に訪れたページ)を取り出す。エディタの「元に戻す(Ctrl+Z)」もスタックで実現されているよ。

ひよこ ひよこ

コールスタックって聞いたことがあるんだけど?

ペンギン先生 ペンギン先生

関数を呼び出すたびに「どこから呼ばれたか・どこに戻るか」の情報をスタックに積んでいく仕組みだよ。再帰関数を深くしすぎると「スタックオーバーフロー」というエラーが起きる。これはスタックの積み上げ上限を超えてしまった状態なんだ。

ひよこ ひよこ

スタックとキューってどう使い分けるの?

ペンギン先生 ペンギン先生

「最後に追加したものを最初に処理したい」ならスタック、「最初に追加したものを最初に処理したい」ならキューだよ。ブラウザの戻るボタンはスタック、プリンタの印刷順はキューメッセージキューRabbitMQ等)は名前の通りキューの考え方で、順番にリクエストを処理するんだ。

ひよこ ひよこ

技術スタック」のスタックは別の意味なの?

ペンギン先生 ペンギン先生

いい質問だね。技術スタック(Tech Stack)のスタックは「積み重ね」という原義から来ていて、データ構造のスタックとは別の意味で使われているよ。「フロントエンドReact)+バックエンドNode.js)+DB(PostgreSQL)」のように技術を層として積み重ねるイメージ。「LAMPLinux+Apache+MySQL+PHP)」や「MERNMongoDB+Express+React+Node.js)」が有名な技術スタックだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「スタック」って出てきたら「後から入れたものを先に取り出すお皿の積み上げ方式のデータ構造」と思えばだいたいOK!
📖 おまけ:英語の意味
「Stack」 = 積み重ね・積み上げたもの
💬 英語で「積み上げた山」を意味する。皿を積み上げて一番上から取るイメージがそのまま名前になっているよ
← 用語集にもどる