Cyclic Queue の実装では、テール ポインターはキューの最後の要素の 1 つ後ろの位置を指します。
|1|2|3|4|5| | |
^ ^
front tail
なぜ?
最後の要素の 1 つ前ではなく、最後の要素を指すテール ポインターを使用して Cyclic Queue を実装できると思います。
実際、そのように実装できます。テール ポインターが最後の要素の 1 つ後ろの位置を指すようにすることには、特定の対称性があります。
front
最初の (最も古い) 使用された要素を指す - 次に読み込まれる要素tail
最初の (最も古い) 未使用の要素を指す - 次に書き込まれる要素いずれの場合も、満杯の循環キューと空の循環キューを区別するために、もう少し処理を行う必要があります。いくつかの代替手段 (自分のやり方を含む) については、ウィキペディアの循環バッファーに関する記事で説明されています。
キューが空か満杯かを判断する方法の実装のようです。
http://en.wikipedia.org/wiki/Circular_buffer#Full_.2F_Empty_Buffer_Distinction