结构推理 假设循环队列中只设rear和length分别指示循环队列中的队尾位置和队列中所含元素的个数。试给出该循环队列的队空条件和队满条件,并写出相应的入队(Add_Queue)算法和出队(Del_Queue)算法。
【正确答案】定义该循环队列的存储结构:
   #define datatype char
   #define MAXSIZE 100  /*队列的最大容量*/
       typedef  struct
   {datatype data[MAXSIZE];  /*队列的存储空间*/
       int rear,length;
   }SEQQUEUE;
   SEQQUEUE*q;
   循环队列的队空条件是:q->length==0
   循环队列的队满条件是:q->length==MAXSIZE
   (1)入队
   void Add_Queue(SEQQUEUE*q,datatype x)
   {  if(q->length==MAXSIZE)/*队列满*/
           printf("Queue full\n");
       else
       {  q->rear=(q->rear+1)/%MAXSIZE;
           q->data[q->rear]=x;
           q->length++;
       }
   }
   (2)出队
   dat atype Del_Queue(SEQQUEUE*q)
   {datatype x;
       int front;
       if(q->length==0)  /*队列为空*/
       {printf("Queue empty\n");
           x=NULL;)
       else
       { front=(MAXSIZE+q->rear-q->length+1)/%MAXSIZE;/*计算头指针位置*/
           x=q->data[front];
           q->length--;)
       return x;
   }
【答案解析】