Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

スタック

スタック(stack) はデータの中で最後に入ったものが最初に取り出される 後入れ先出し(Last In First Out: LIFO) のデータ構造

操作:

  • push(x): スタックに要素xを追加する

  • pop(): スタックの最後の要素を取り出す

2

計算量

スタックは内部的にリストや連結リストで実装されるため、末尾へのアクセスがO(1)になる。

操作計算量説明
pushO(1)O(1)末尾への追加
popO(1)O(1)末尾からの取り出し
peek(先頭参照)O(1)O(1)末尾要素の参照(取り出しなし)
is_emptyO(1)O(1)空かどうかの確認
サイズ取得O(1)O(1)要素数の取得
探索O(n)O(n)特定の要素を見つけるには全走査が必要

Pythonのリストを使ったスタックでは、append と pop(-1) がともに償却 O(1)O(1)。

利用例

例1: 括弧の対応チェック

文字列中の ( と ) が正しく対応しているか確認する。

  • ( が来たらスタックに積む

  • ) が来たら、スタックが空なら対応なし → False、そうでなければ ( を取り出す

  • 最後にスタックが空なら全て対応している

True
False
False

例2: テキストエディタのUndo機能

文字の入力操作と 'undo' 操作をシミュレートする。入力した文字をスタックに積み、'undo' が来たら最後の文字を取り消す。

hello