演習3.12代替の循環キュー(20ポイント)
循環配列を使用してキューを表す場合、キューのヘッドポインターのみがフロントに設定され、テールポインターはリアに設定されませんが、キュー内の要素の数を記録するために別のカウントが設定されます。キューのエンキューおよびデキュー操作を実装するアルゴリズムを記述してください。
例:
bool AddQ( Queue Q, ElementType X )
{
if(Q->Count == Q->MaxSize) {
printf("Queue Full\n");
return false;
}
Q->Data[(Q->Front+Q->Count++)%Q->MaxSize] = X;
return true;
}
ElementType DeleteQ( Queue Q )
{
ElementType res;
if(Q->Count == 0) {
printf("Queue Empty\n");
return ERROR;
}
res = Q->Data[Q->Front];
Q->Front = (Q->Front+1) % Q->MaxSize;
Q->Count--;
return res;
}
アイデア:
カウントを使用してリアを計算します