補足
- 配列のN個のデータがリングになっているので,enqueue/dequeueに伴って,
インデックス(tail/head)は0,1,2,...,N-1,0,1,2,...,N-1,0,1,2,...と進む
これはNで割った余りの世界(mod N)である!
剰余類や剰余系について調べてみよ!!
(ここでは配列の要素数DATANUMをNと表している)
- headやtailが1増える計算はどのような式で書くべきか考えてみよ!
head++,head+=1,head=head+1
等では足りないよね?!
- データが1個のとき
head == tail
である
- データが0個のとき:最後の1個だったデータがdequeueされてheadが1つ進んだ状態
ここで1個のデータがenqueueされると,tailが1増えて,1個の状態に戻るから,
(tail + 1) % DATANUM == head
- 上の状況はheadからtailまでにN個のデータが全て詰まっている状態と区別できないので,
別の変数を使って区別する手もあるが,N-1個までしかデータをenqueueしない仕様とする!
- データが満杯(N-1個)のとき:
どのような式で判定できるか考えてみよ!
|