首页 > 编程语言 >【数据结构/C语言】编写循环顺序队列结构相应的入队和出队算法

【数据结构/C语言】编写循环顺序队列结构相应的入队和出队算法

时间:2022-11-14 18:57:09浏览次数:53  
标签:队尾 队列 C语言 入队 出队 front rear

如果希望循环顺序队列中的存储空间都能得到利用,可设置一个标志域变量tag,并以tag的值为0或1来区分队头指针和队尾指针相等时的队列状态是“空”还是“满”。试编写此结构相应的入队和出队算法。

提示:满足上述要求的队列存储结构可描述如下:

typedef struct   {

     QElemType  *base;     //连续存储空间基址

       int  front;      //队头指针,指向队首元素     

       int  rear;        //队尾指针,指向队尾元素的下一位置

       int  flag;       // 标志域,初值为0,每当入队时,置值为1;每当出队时,置值为0;

}SqQueue;

//入队操作算法

Status EnQueue(SqQueue &Q, QElemType e)    //设置一个标志变量的方法  

  // 在循环顺序队列Q中插入新的元素e, 使其成为新的队尾元素

{   if (Q.front==Q.rear&&Q.flag==1)          //当前队满

    {    printf("The Queue  is OVERFLOW!\n");

         return ERROR;

    }

    Q.base[Q.rear]=e;                     //e入队

    Q.rear=(Q.rear+1)%MAXQSIZE;        //队尾指针下移一位    

    Q.flag=1;                             //标志变量置为入队状态

    return OK;

}//EnQueue

//出队操作算法

Status DeQueue (SqQueue &Q, QElemType &e)     //设置一个标志变量的方法

  // 删除循环顺序队列Q中的队首元素,并用e返回其值

{  

    if (Q.front==Q.rear&&Q.flag==0)              //当前队空   

     {      printf("The Queue is NULL!\n");

              return ERROR; 

     }                                          

    e=Q.base[Q.front];                       //用e返 队首元素

    Q.front=(Q.front+1)%MAXQSIZE;         //队首指针下移一位

    Q.flag=0;                                //标志变量置为出队状态

    return OK;

} //DeQueue

标签:队尾,队列,C语言,入队,出队,front,rear
From: https://www.cnblogs.com/aal-izz-well-eureka/p/16890020.html

相关文章