スタックとは
スタック(Stack)とは、データを一時的に保存するデータ構造の一種で、最初に入れたデータが最後に出てきて、最後に入れたデータが最初に出てくる「後入れ先出し(LIFO:Last In, First Out)」というルールで管理される仕組みです。データを積み上げるイメージで、一番上にデータを追加する操作を「プッシュ(Push)」、一番上からデータを取り出す操作を「ポップ(Pop)」と呼びます。
具体例
Webブラウザの「戻る」ボタンの機能です。新しいページを開くたびに履歴データがスタックにプッシュ(積み上げ)され、「戻る」を押すと、最後に見た(スタックの一番上にある)ページ履歴がポップ(取り出し)されて表示されます。
// スタックの動作イメージ
let historyStack = [];
historyStack.push("ページA");
historyStack.push("ページB"); // ページBが一番上にある
let lastPage = historyStack.pop();
console.log(lastPage); // 出力: "ページB" (最後に入れたものが最初に出る)もう少し詳しく
スタック(Stack)は、最後に追加したデータが最初に取り出される「後入れ先出し(LIFO:Last In, First Out)」の特性を持つ論理的なデータ構造です。データを格納する操作を「プッシュ(Push)」、データを取り出す操作を「ポップ(Pop)」と呼びます。スタックは、現在処理しているタスクの一時中断と再開を管理するのに非常に適した構造です。コンピュータ内部のプログラム実行において、関数(サブルーチン)が呼び出された際、呼び出し元の処理を一時中断して元の場所(戻りアドレス)やローカル変数をメモリ上の「コールスタック(スタック領域)」にプッシュします。呼び出された関数の処理が終了すると、スタックから戻りアドレスをポップして、元の処理へと正確に戻ることができます。このように、プログラムの入れ子構造(ネスト)や再帰処理の制御において、スタックは不可欠な役割を担っています。
試験でのポイント
試験では、スタックに対するプッシュとポップの具体的な一連の操作手順を示され、「最終的にスタックに残るデータは何か」や「取り出されるデータの順序はどうなるか」を問うトレース問題が非常によく出題されます。また、数式をコンピュータで評価する際に使われる「逆ポーランド記法(後置記法)」の計算アルゴリズムにおいて、演算子が現れたらスタックから数値をポップして演算し結果を再びプッシュする、という具体的な挙動と仕組みについての理解も重要なポイントとなります。
関連する用語
LIFO(後入れ先出しの管理方式)、逆ポーランド記法(演算子を数値の後ろに記述する数式の表現方法)、再帰呼び出し(関数が自分自身を呼び出す処理手法)。