假设循环队列中只设rear和length来分别指示队尾元素和队中元素的个数,试给出半判断此循环队列的队满条件

问题描述:

假设循环队列中只设rear和length来分别指示队尾元素和队中元素的个数,试给出半判断此循环队列的队满条件
并写出相应的入队和出队算法

假设循环队列的长度为MAX,
判断循环队列为满的基本条件是(rear + 1)% MAX == front
而front =(rear - length + MAX)%MAX
综合得到判断循环队列为满的条件:
(rear + 1)% MAX ==(rear - length + MAX)%MAX可以写一下相应的入队和出对算法吗/* 循环队列结构 */typedef int ElemType;typedef struct Queue{ElemType data;struct Queue *rear;struct Queue length;}Queue;/* 将data入循环队列 */void EnQueue(Queue *Q, ElemType data){if((Q->rear+1)%MAX == (Q->rear-Q->length+MAX)%MAX)return;Q->base[Q->rear] = data;Q->rear = (Q->rear+1)%MAX;Q->length++;}/* 出队列,结果存*data中 */void DeQueue(Queue *Q, ElemType *data){if(Q->rear == (Q->rear-Q->length+MAX)%MAX)return;*data = Q->base[(Q->rear-Q->length+MAX)%MAX];Q->length--;}