您的位置:首页 > 其它

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

2020-03-29 19:07 127 查看

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

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

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

#include <stdio.h>
#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
队未满
队不为空
队未满
队为空
  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
格桑15487 发布了7 篇原创文章 · 获赞 3 · 访问量 376 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐