PTA 习题3.12 另类循环队列

习题3.12 另类循环队列
题目要求:
如果用一个循环数组表示队列,并且只设队列头指针Front,不设尾指针Rear,而是另设Count记录队列中元素个数。请编写算法实现队列的入队和出队操作。
接口:
bool AddQ( Queue Q, ElementType X );
ElementType DeleteQ( Queue Q );
注意:如果队列已满,AddQ函数必须输出“Queue Full”并且返回false;如果队列是空的,则DeleteQ函数必须输出“Queue Empty”,并且返回ERROR。
代码:

bool AddQ( Queue Q, ElementType X ){if(Q->Count==Q->MaxSize){printf("Queue Full\n");return false;}else{Q->Data[(Q->Count+Q->Front)%Q->MaxSize]=X;Q->Count++;}return true;
}ElementType DeleteQ( Queue Q ){if(Q->Count==0){printf("Queue Empty\n");return ERROR;}else{Q->Front=(Q->Front+1)%Q->MaxSize;Q->Count--;return Q->Data[(Q->Front-1+Q->MaxSize)%Q->MaxSize];}
}

解题思路:
1、审好题,说的是循环队列。Data从[0]开始存。
2、注意只要计算结点位置时基本上都要使用到取余运算。同时要保证取余的数是正数,保证(Q->Front-1+Q->MaxSize)这句话不出错。