假设以数组sequ[m]存放循环队列的元素 同时设变量rear和quelen分别指示循环队列中队尾元素的位置和内含元素

大学 队列,元素,中队 已帮助 人

假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列算法中要返回队头元素)。

热搜:下面程序的功能是输出数组s中最大元素

答案解析

难度★★☆ 搜索
  • 循环队列满的条件是: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)。