概要
先に入れたものが、先に出ていくという仕組みのデータ構造のこと。「FIFO (First In, First Out)」とも呼ばれます。レジの行列のように、並んだ順番通りに処理されるのが特徴です。
キューの仕組みを体験してみよう
下のデモでキューの動きを体験できます。実際に手を動かすことで、「先入れ先出し」の仕組みが理解しやすくなります。
ポイント
- Enqueue (エンキュー): 列の末尾にデータを追加すること。
- Dequeue (デキュー): 列の先頭からデータを取り出すこと。
- 印刷ジョブの管理やタスク処理など、順番が重要な場面で使われます。
日常生活でのキューの例
キュー構造は日常のあらゆる場面で使われています。意識していないだけで、私たちは毎日キューに囲まれて生活しているのです。
1. レジの行列
スーパーやコンビニのレジに並ぶ行列は、まさにキューそのものです。先に並んだ人から順番に会計を済ませていきます。 割り込みをすると怒られるのは、キューのルール(FIFO)を破っているからです。
2. 印刷ジョブの待機列
オフィスで複数の人が同じプリンターに印刷指示を出した場合、印刷ジョブはキューに入ります。 先に送った印刷データから順番に印刷されるので、自分の番が来るまで待つ必要があります。
3. 電話の着信待ち
コールセンターに電話をかけると「ただいま電話が大変混み合っております。順番にお繋ぎいたします」というアナウンスを聞くことがありますが、 これもキューの仕組みです。電話をかけた順番に対応されます。
4. アプリのタスク処理
SNSアプリで「いいね」を連打すると、裏側ではそれらのリクエストがキューに入り、順番に処理されます。 サーバーが一度に処理できる量には限界があるため、キューで順番待ちをさせることでシステムを安定させています。
5. YouTubeの再生キュー
YouTube Musicやプレイリストで「次に再生」をタップすると、その曲がキューに追加されます。 現在の曲が終わったら、キューの先頭から順番に再生されていく仕組みです。
コードで実装してみよう
さっきの「レジの行列」の例を、そのままコードで実装してみましょう。 コンビニのレジに並ぶ人を、キューを使って管理するコードです。
このコードで実装していること:
- レジに並ぶ人をキューで管理する
- 新しい人が来たら列の後ろに追加(Enqueue)
- 会計が終わった人を列の先頭から取り出す(Dequeue)
- 先に並んだ人から順番に会計する仕組み
レジの行列をコードで実装 (JavaScript)
// コンビニのレジに並ぶ人を管理するキュー
const registerQueue = [];
// お客さんが来たら列の後ろに並ぶ(Enqueue)
registerQueue.push('田中さん');
registerQueue.push('佐藤さん');
registerQueue.push('鈴木さん');
console.log('現在の列:', registerQueue);
// 出力: ['田中さん', '佐藤さん', '鈴木さん']
// 会計が終わった人を列の先頭から取り出す(Dequeue)
const servedCustomer = registerQueue.shift();
console.log('会計終了:', servedCustomer); // "田中さん"
console.log('残りの列:', registerQueue);
// 出力: ['佐藤さん', '鈴木さん']
// また新しいお客さんが来たら...
registerQueue.push('山田さん');
console.log('新しい列:', registerQueue);
// 出力: ['佐藤さん', '鈴木さん', '山田さん']
// 次の会計
const nextCustomer = registerQueue.shift();
console.log('次の会計:', nextCustomer); // "佐藤さん"
// → 先に並んでいた佐藤さんが先に会計できる💡 ポイント:このコードは、さっき説明した「レジの行列」の仕組みをそのまま実装しています。 先に並んだ人(先に追加したデータ)から順番に処理されるのが、キューの特徴です。