【数据结构/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
posted @   卞彦秋euReKa  阅读(414)  评论(0编辑  收藏  举报
编辑推荐:
· 使用 .NET Core 实现一个自定义日志记录器
· [杂谈]如何选择:Session 还是 JWT?
· 硬盘空间消失之谜:Linux 服务器存储排查与优化全过程
· JavaScript是按顺序执行的吗?聊聊JavaScript中的变量提升
· [杂谈]后台日志该怎么打印
阅读排行:
· 2000 Star,是时候为我的开源项目更新下功能了
· 面试官:DNS解析都整不明白,敢说你懂网络?我:嘤嘤嘤!
· [WPF UI] 为 AvalonDock 制作一套 Fluent UI 主题
· 基于.NET WinForm开发的一款硬件及协议通讯工具
· 内网穿透之http代理服务器
点击右上角即可分享
微信分享提示