両端キュー(基本操作)
両端からのアクセスが可能な双方向キューデータ構造の基本操作を学ぼう
O(1)
時間計算量
O(n)
空間計算量
中級
難易度
双方向
アクセス
🔧 操作設定
現在の両端キュー:
[1, 2, 3]
選択した操作:
pushBack(4)
サイズ:
3 要素
先頭:
1
末尾:
3
📚 両端アクセス: 先頭と末尾の両方から操作可能
📚 推奨操作例
🔄
両端キュー操作を実行してください
左側の設定パネルから操作を選択し、「両端キュー操作実行」ボタンを押してください
💻 実装例(JavaScript)
class Deque {
constructor() {
this.items = [];
}
// 先頭に要素を追加 - O(1)
pushFront(element) {
this.items.unshift(element);
return this.items.length;
}
// 末尾に要素を追加 - O(1)
pushBack(element) {
this.items.push(element);
return this.items.length;
}
// 先頭要素を取り出し - O(1)
popFront() {
if (this.isEmpty()) {
throw new Error("両端キューが空です");
}
return this.items.shift();
}
// 末尾要素を取り出し - O(1)
popBack() {
if (this.isEmpty()) {
throw new Error("両端キューが空です");
}
return this.items.pop();
}
// 先頭要素を確認(削除なし) - O(1)
front() {
if (this.isEmpty()) {
return undefined;
}
return this.items[0];
}
// 末尾要素を確認(削除なし) - O(1)
back() {
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();
}
}
// 使用例
const deque = new Deque();
// 両端から要素の追加
deque.pushBack(2); // [2]
deque.pushFront(1); // [1, 2]
deque.pushBack(3); // [1, 2, 3]
deque.pushFront(0); // [0, 1, 2, 3]
console.log(deque.display()); // [0, 1, 2, 3]
// 両端の要素確認
console.log(deque.front()); // 0
console.log(deque.back()); // 3
// 両端から要素の削除
console.log(deque.popFront()); // 0 → [1, 2, 3]
console.log(deque.popBack()); // 3 → [1, 2]
console.log(deque.display()); // [1, 2]
// 状態の確認
console.log(deque.size()); // 2
console.log(deque.isEmpty()); // false
// スタックとしての使用(pushBack, popBack)
deque.pushBack(4);
deque.pushBack(5);
console.log(deque.popBack()); // 5 (LIFO)
// キューとしての使用(pushBack, popFront)
deque.pushBack(6);
console.log(deque.popFront()); // 1 (FIFO)
🎯 両端キューの特徴
基本特性
- • 両端からの追加・削除が可能
- • すべての基本操作がO(1)で高速
- • スタックとキューの機能を統合
- • 柔軟なデータアクセスパターン
実世界での応用
- • ブラウザの履歴管理(前進・後退)
- • アンドゥ・リドゥ機能の実装
- • スライディングウィンドウ
- • 回文判定アルゴリズム
💡 ポイント: 両端キューはスタックとキューの最良の特徴を併せ持ち、 より柔軟なデータアクセスを可能にします。