スタック(Stack)データ構造の説明
スタック(Stack)の概念
- スタック(stack)は積み上げた山を意味する。
- 一方の端からだけデータを入れたり取り出したりできる、後入れ先出し(LIFO: Last In First Out)形式のデータ構造である。
- 最も最近入ったデータが最初に出る。
スタックの構造
- スタック上端: top
- スタック下端: 不要
- 要素、項目
- 挿入/削除演算

スタック(Stack)の演算
スタック(Stack)はLIFO(Last In First Out)に従う。つまり、最も最近スタックに追加した項目が、最初に削除される項目である。
- push(x): 与えられた要素xをスタックの一番上に追加する。
- pop(): スタックが空でなければ、一番上の要素を削除して返す。
- isEmpty(): スタックが空なら真(true)、そうでなければ偽(false)を返す。
- peek(): スタックが空でなければ、一番上の要素を削除せずに返す。
- isFull(): スタックが満杯なら真(true)、そうでなければ偽(false)を返す。
- size(): スタック内のすべての要素数を返す。
- display(): スタック内のすべての要素を出力する。
スタック(Stack)の用途
- 関数呼び出し
- 再帰アルゴリズムを使う場合、スタックが有用である。
- 再帰アルゴリズム
- 再帰的に関数を呼び出す必要がある場合、一時データをスタックに入れる。
- 再帰関数から戻ってバックトラック(backtrack)するときは、スタックに入れておいた一時データを取り出す必要がある。
- スタックは、この一連の動作を直感的に可能にする。
- また、スタックは再帰アルゴリズムを反復形式(iterative)で実装できるようにする。
- 再帰アルゴリズム
- Webブラウザの履歴(戻る)
- 元に戻す(undo)
- 逆順文字列の作成
- 式の括弧検査(演算子優先順位表現のための括弧検査)
- 例: 正しい括弧文字列(VPS, Valid Parenthesis String)の判定
- 計算機(後置記法計算)
