问答题 假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列算法中要返回队头元素)。
【正确答案】循环队列满的条件是:quelen==m。
   (1)数据结构
   struct Queue{
       DataType sequ[m];
       int rear,quelen;
   };
   typedef struct Queue*PQueue;
   (2)思路
   入队列和出队列的算法和普通队列的思路近似,只是原来用两指针指向之差来表示队列中元素的个数,现在直接用quelen来表示。
   (3)算法
   PQueue createEmptyQueue(){    /*创建空队列*/
       PQueue pqu=(PQueue)malloc(sizeof(struct Queue));
       pqu->rear=0;
       pqu->quelen=0;    /*初始化*/
   }
   void enQueue(PQueue pqu,DataType x){    /*入队列*/
       if(pqu->quelen==m){
           printf("Overflow!in");
           return;
       }
       pqu->sequ[pqu->rear]=x;
       pqu->rear=(pqu->rear+1)/%m;
       pqueue->quelen++;
   }
   DataType deQueue(PQueue pqu){
   /*对非空队列,求队列的头元素,并出队列*/
       int front=(pqu->rear-pqu->quelen)/%M;
       pqu->quelen--;
       return pqu->sequ[front];
   }
   (4)代价分析
   上述几个算法都不包含循环,只有常数条语句,因此每个算法的时间代价均为O(1)。
【答案解析】