Keito

© 2024 Keito

技術ブログとポートフォリオ

キュー(基本操作)

FIFO(First In, First Out)原理に基づくキューデータ構造の基本操作を学ぼう

O(1)
時間計算量
O(n)
空間計算量
初級
難易度
FIFO
原理

🔧 操作設定

現在のキュー:
[1, 2, 3]
選択した操作:
enqueue(4)
キューサイズ:
3 要素
先頭:
1
末尾:
3
📚 FIFO: 最初に入れた要素が最初に取り出される

📚 推奨操作例

📋

キュー操作を実行してください

左側の設定パネルから操作を選択し、「キュー操作実行」ボタンを押してください

💻 実装例(JavaScript)

class Queue {
    constructor() {
        this.items = [];
    }
    
    // 要素を末尾に追加 - O(1)
    enqueue(element) {
        this.items.push(element);
        return this.items.length;
    }
    
    // 先頭要素を取り出し - O(1)
    dequeue() {
        if (this.isEmpty()) {
            throw new Error("キューが空です");
        }
        return this.items.shift();
    }
    
    // 先頭要素を確認(削除なし) - O(1)
    front() {
        if (this.isEmpty()) {
            return undefined;
        }
        return this.items[0];
    }
    
    // 末尾要素を確認(削除なし) - O(1)
    rear() {
        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 queue = new Queue();

// 要素の追加(enqueue)
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log(queue.display()); // [1, 2, 3] (左が先頭、右が末尾)

// 先頭・末尾要素の確認
console.log(queue.front()); // 1 (最初に追加された要素)
console.log(queue.rear());  // 3 (最後に追加された要素)

// 要素の取り出し(dequeue)
console.log(queue.dequeue()); // 1 (先頭要素を取り出し)
console.log(queue.display()); // [2, 3]

// 状態の確認
console.log(queue.size()); // 2
console.log(queue.isEmpty()); // false

// 全要素の取り出し
queue.dequeue(); // 2
queue.dequeue(); // 3
console.log(queue.isEmpty()); // true

🎯 キューの特徴

基本特性

  • • FIFO(First In, First Out)原理
  • • すべての基本操作がO(1)で高速
  • • 先頭から取り出し、末尾に追加
  • • 順序を保つデータアクセス

実世界での応用

  • • プロセス管理のタスクキュー
  • • ネットワークデータパケット処理
  • • プリンタの印刷待ち行列
  • • 幅優先探索(BFS)アルゴリズム

💡 ポイント: キューは待ち行列のイメージで、日常生活でも身近な概念です。 順序を保って処理したい場面で活用されます。