牺牲一个存储空间的循环队列实现方法

Endora ·
更新时间:2024-11-15
· 514 次阅读

牺牲一个存储空间的循环队列实现方法

1.定义循环队列的数据结构
2.初始化
3.入队操作
4.出队操作
5.读队头元素
6.判空操作
7.判满操作
8.计算当前队列中元素的个数
9.测试
10.终端输出结果

所用编译器:Visual Studio Code 1.42.1 C++环境

#include #define MaxSize 10 typedef int ElemType; //定义循环队列的数据结构 typedef struct{ ElemType data[MaxSize]; int front,rear; }SqQueue; //初始化 void InitQueue(SqQueue &Q){ Q.front=0; Q.rear=0; } //入队操作 bool EnQueue(SqQueue &Q,ElemType x){ if((Q.rear+1)%MaxSize==Q.front) return false; Q.data[Q.rear]=x; Q.rear=(Q.rear+1)%MaxSize; return true; } //出队操作 bool DeQueue(SqQueue &Q,ElemType &x){ if(Q.rear==Q.front) return false; x=Q.data[Q.front]; Q.front=(Q.front+1)%MaxSize; return true; } //读对头元素 bool GetHead(SqQueue Q,ElemType &x){ if(Q.rear==Q.front) return false; x=Q.data[Q.front]; return true; } //判空操作 bool QueueEmpty(SqQueue Q){ return(Q.rear==Q.front); } //判满操作 bool QueueFull(SqQueue Q){ return((Q.rear+1)%MaxSize==Q.front); } //计算当前队列中元素的个数 void QueueNum(SqQueue Q,int &x){ x=(Q.rear+MaxSize-Q.front)%MaxSize; } //测试 int main(){ SqQueue Q; InitQueue(Q); ElemType a,b,x,num; //入队4个数,依次为2,4,6,8 EnQueue(Q,2); EnQueue(Q,4); EnQueue(Q,6); EnQueue(Q,8); //出队2个数并打印 DeQueue(Q,a); DeQueue(Q,b); printf("a=%d\n",a); printf("b=%d\n",b); //读当前队头元素并打印 GetHead(Q,x); printf("x=%d\n",x); //计算当前队列长度 QueueNum(Q,num); printf("num=%d\n",num); //判断此时队列是否为满,是否为空 if(QueueFull(Q)) printf("队已满\n"); else printf("队未满\n"); if(QueueEmpty(Q)) printf("队为空\n"); else printf("队不为空\n"); //将剩下的两个元素出队,然后判断队列是否为满,是否为空 DeQueue(Q,a); DeQueue(Q,b); if(QueueFull(Q)) printf("队已满\n"); else printf("队未满\n"); if(QueueEmpty(Q)) printf("队为空\n"); else printf("队不为空\n"); } //终端输出结果 PS D:\VSCode\第三章 栈和队列\队列的顺序存储> cd "d:\VSCode\ ջͶ\е˳洢\" ; if ($?) { g++ ѭ.cpp -o ѭ } ; if ($?) { .\ѭ } a=2 b=4 x=6 num=2 队未满 队不为空 队未满 队为空
作者:格桑15487



队列 方法 循环 存储 循环队列

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章