スタック(基本操作)
LIFO(Last In, First Out)原理に基づくスタックデータ構造の基本操作を学ぼう
O(1)
時間計算量
O(n)
空間計算量
初級
難易度
LIFO
原理
🔧 操作設定
現在のスタック:
[1, 2, 3]
選択した操作:
push(4)
スタックサイズ:
3 要素
📚 LIFO: 最後に入れた要素が最初に取り出される
📚 推奨操作例
📚
スタック操作を実行してください
左側の設定パネルから操作を選択し、「スタック操作実行」ボタンを押してください
💻 実装例(JavaScript)
class Stack {
constructor() {
this.items = [];
}
// 要素を先頭に追加 - O(1)
push(element) {
this.items.push(element);
return this.items.length;
}
// 先頭要素を取り出し - O(1)
pop() {
if (this.isEmpty()) {
throw new Error("スタックが空です");
}
return this.items.pop();
}
// 先頭要素を確認(削除なし) - O(1)
peek() {
if (this.isEmpty()) {
return undefined;
}
return this.items[this.items.length - 1];
}
// スタックが空かどうかを確認 - O(1)
isEmpty() {
return this.items.length === 0;
}
// 要素数を取得 - O(1)
size() {
return this.items.length;
}
// スタックの内容を表示
display() {
return this.items.slice().reverse(); // 先頭が上になるように表示
}
}
// 使用例
const stack = new Stack();
// 要素の追加
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack.display()); // [3, 2, 1] (先頭が上)
// 先頭要素の確認
console.log(stack.peek()); // 3
// 要素の取り出し
console.log(stack.pop()); // 3
console.log(stack.display()); // [2, 1]
// 状態の確認
console.log(stack.size()); // 2
console.log(stack.isEmpty()); // false
🎯 スタックの特徴
基本特性
- • LIFO(Last In, First Out)原理
- • すべての基本操作がO(1)で高速
- • 一方向(先頭)からのみアクセス
- • メモリ効率が良い
実世界での応用
- • 関数呼び出しのコールスタック
- • ブラウザの戻るボタン履歴
- • 数式の括弧チェック
- • アンドゥ機能の実装
💡 ポイント: スタックは最も基本的なデータ構造の一つで、 プログラミングの多くの場面で活用されています。