まず結論

キューFIFO(First In First Out)=「最初に入れたものが最初に出てくる」データ構造です。コンビニのレジ行列や印刷待ちと同じ仕組み。追加(enqueue)は末尾、取り出し(dequeue)は先頭から行います。

キューのしくみ:FIFOを図で理解

enqueue(追加)
キュー内部
A
B
C
D
先頭(front) 末尾(rear)
dequeue(取り出し)
A(最初に入った)
追加は末尾(右)から / 取り出しは先頭(左)から → FIFO

キューの操作とトレース

操作キューの状態(先頭→末尾)取り出し値
初期状態(空)-
enqueue(10)[10]-
enqueue(20)[10, 20]-
enqueue(30)[10, 20, 30]-
dequeue()[20, 30]10(最初に入った)
enqueue(40)[20, 30, 40]-
dequeue()[30, 40]20
キューの用途

・プリンタの印刷待ちキュー
・ネットワークのパケット送受信
・CPU の実行待ちプロセス管理
・幅優先探索(BFS)

スタックとの違い

スタック: LIFO(後入れ先出し)
キュー: FIFO(先入れ先出し)

スタック→「積み重ね」
キュー→「行列・待ち行列」

循環キュー

配列でキューを実装する際、dequeueを繰り返すと先頭が後ろにずれていく問題がある。循環キューは配列の末尾を先頭に繋げることでメモリを効率的に利用する。

循環キューのポイント:frontとrearのインデックスをモジュロ演算(% 配列サイズ)で循環させる。front == rear のとき「空」、(rear + 1) % size == front のとき「満杯」。

🎯 試験での出方

⚠️ よくある間違い

✍️ 確認クイズ

Q1. キューにA→B→Cの順でenqueueした後、dequeueを1回行った。取り出される値はどれか。
✅ 正解は①。キューはFIFO(先入れ先出し)。最初にenqueueされたAが最初にdequeueされます。
Q2. キューの性質を正しく表しているものはどれか。
✅ 正解は②。キューはFIFO(First In First Out)。最初に入れたデータが最初に出てきます。スタックはLIFO(Last In First Out)です。
Q3. キューが実際のシステムで使われている例として適切なものはどれか。
✅ 正解は③。プリンタの印刷待ちはFIFO(先に送ったものが先に印刷)なのでキューを使います。「戻る」機能やコールスタックはスタック(LIFO)です。
Q4. 空のキューに対してenqueue(A)→enqueue(B)→dequeue()→enqueue(C)→dequeue()の操作後、キューの状態はどれか。
✅ 正解は③。操作を順番に追うと:enqueue(A)→[A]、enqueue(B)→[A,B]、dequeue()→Aを取り出し[B]、enqueue(C)→[B,C]、dequeue()→Bを取り出し[C]。FIFOのルールで先頭から取り出すことを確実に追跡することが重要です。
Q5. 優先度付きキュー(Priority Queue)の説明として正しいものはどれか。
✅ 正解は③。優先度付きキューは各要素に優先度を設け、追加順ではなく優先度が高い要素から取り出します。OSのプロセススケジューリング(優先度順)や、ダイクストラ法(最短経路算出)に使われます。通常のキュー(FIFO)とは異なります。

Sponsor Link