【数据结构/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
【推荐】FFA 2024大会视频回放:Apache Flink 的过去、现在及未来
【推荐】中国电信天翼云云端翼购节,2核2G云服务器一口价38元/年
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用 .NET Core 实现一个自定义日志记录器
· [杂谈]如何选择:Session 还是 JWT?
· 硬盘空间消失之谜:Linux 服务器存储排查与优化全过程
· JavaScript是按顺序执行的吗?聊聊JavaScript中的变量提升
· [杂谈]后台日志该怎么打印
· 2000 Star,是时候为我的开源项目更新下功能了
· 面试官:DNS解析都整不明白,敢说你懂网络?我:嘤嘤嘤!
· [WPF UI] 为 AvalonDock 制作一套 Fluent UI 主题
· 基于.NET WinForm开发的一款硬件及协议通讯工具
· 内网穿透之http代理服务器