循環キュー:効率的な固定サイズFIFOバッファ
循環キュー(リングバッファ)がモジュラー演算を使用して固定サイズ配列をラップアラウンドする方法を学びます。frontとrearポインタの管理、満杯 vs 空の検出を理解します。
Queue
詳細な説明
循環キュー(リングバッファ)
循環キューは、rearが末尾に達すると先頭にラップアラウンドする固定サイズ配列を使用して実装されたキューです。dequeue操作後の要素シフトの必要がなくなります。
線形キューの問題
シンプルな配列ベースキューでは、dequeueにより先頭に未使用スペースが残ります。
循環型の解決策
モジュラー演算でrearがラップアラウンドします:
rear = (rear + 1) % capacity
front = (front + 1) % capacity
これによりスロットが再利用されます。
満杯 vs 空の検出
満杯と空の両方の状態でfront == rearとなるため、区別する方法が必要です:
- サイズカウンター:要素数を追跡。
- 1スロットを無駄にする:
(rear + 1) % capacity == frontで満杯。 - ブーリアンフラグ:rearがfrontに追いついたときに設定。
アプリケーション
- プロデューサー-コンシューマーバッファ:カーネルI/Oバッファ、オーディオ/ビデオストリーミングバッファ
- ネットワークパケットバッファ:ルーターやスイッチの固定サイズバッファ
- キーボード入力バッファ:OSがキーストロークを循環バッファに格納
- ロギング:満杯時に最も古いエントリを上書きする固定サイズログバッファ
ユースケース
循環キューは組み込みシステムやOSカーネルでメモリが固定され動的割り当てが高価な場面で広く使用されます。オーディオやビデオストリーミングアプリケーションはスムーズな再生のためにリングバッファを使用します。ネットワークインターフェースはパケット処理に循環バッファを使用します。