【数据结构/C语言】编写循环顺序队列结构相应的入队和出队算法
如果希望循环顺序队列中的存储空间都能得到利用,可设置一个标志域变量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

                
            
        
浙公网安备 33010602011771号