C++循环队列的实现(五)
2021/4/29 22:55:53
本文主要是介绍C++循环队列的实现(五),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
笔记:
设置一个表示元素个数的数据成员tag标记最近一次插入或删除操作,初始化tag为0
头指针指向队头元素,尾指针指向队尾元素的下一个位置
队空条件:(Q.front==Q.rear)&&(Q.tag==0)
队满条件:(Q.front==Q.rear)&&(Q.tag=1)
队中元素个数:(Q.rear-Q.front+MaxSize-1)%MaxSize+1
(这里值得注意,因为如果括号内不减1则队满时元素个数结果为0)
代码如下:
#include <iostream> //设置一个表示元素个数的数据成员tag标记最近一次插入或删除操作 //头指针指向队头元素,尾指针指向队尾元素的下一个位置 typedef int ElemType; using namespace std; //循环队列结构类型 #define MaxSize 10 typedef struct { ElemType data[MaxSize]; int rear,front; int tag; } SqQeueu; //初始化 void InitQueue(SqQeueu &Q) { Q.front=0; Q.rear=0; Q.tag=0; } //判断队空 bool QueueEmpty(SqQeueu Q) { if((Q.front==Q.rear)&&(Q.tag==0))//判断队空 { cout<<"队空!"<<endl; return true; } else return false; } //入队 bool EnQueue(SqQeueu &Q, ElemType x) { if((Q.front==Q.rear)&&(Q.tag==1))//判断队满 { cout<<"队满!无法再插入!"<<endl; return false;//队满则无法插入 } Q.data[Q.rear]=x;//先放元素 Q.rear=(Q.rear+1)%MaxSize;//再改变指针指向 Q.tag=1;//标记插入操作 return true; } //出队 bool DeQueue(SqQeueu &Q, ElemType &x) { if((Q.front==Q.rear)&&(Q.tag==0))//判断队空 return false;//队空则无法删除 x=Q.data[Q.front];//先取元素 Q.front=(Q.front+1)%MaxSize;//再改变指针指向 Q.tag=0;//标记删除操作 return true; } //读取队头 bool GetHead(SqQeueu Q, ElemType &x) { if((Q.front==Q.rear)&&(Q.tag==0))//判断队空 return false; x=Q.data[Q.front];//取元素 cout<<"队头元素为:"<<x<<endl; return true; } //求队中元素的个数 void GetNumber(SqQeueu Q, int &y) { y=(Q.rear-Q.front+MaxSize-1)%MaxSize+1; cout<<"队中元素个数为:"<<y<<endl; } //打印输出队列 void PrintQueue(SqQeueu Q) { if((Q.front==Q.rear)&&(Q.tag==0))//判断队空 return; cout<<"队中元素为:"; do { cout<<Q.data[Q.front]<<" "; Q.front=(Q.front+1)%MaxSize; }while(Q.front!=Q.rear); cout<<endl; } int main() { int x; int y=0;//用y来记录队列中元素的个数 SqQeueu Q;//声明一个队列 InitQueue(Q);//初始化一个队列 QueueEmpty(Q);//判断队空 GetNumber(Q,y);//获取队列中元素的个数 cout<<"元素入队......"<<endl; EnQueue(Q,1); EnQueue(Q,2); EnQueue(Q,3); EnQueue(Q,4); EnQueue(Q,5); EnQueue(Q,6); EnQueue(Q,7); EnQueue(Q,8); EnQueue(Q,9); EnQueue(Q,10); GetHead(Q,x); GetNumber(Q,y); PrintQueue(Q); cout<<"元素出队......"<<endl; DeQueue(Q,x); DeQueue(Q,x); GetHead(Q,x); GetNumber(Q,y); PrintQueue(Q); cout<<"元素入队......"<<endl; EnQueue(Q,11); EnQueue(Q,12); GetHead(Q,x); GetNumber(Q,y); PrintQueue(Q); return 0; }
这篇关于C++循环队列的实现(五)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-06怎么解决跨域资源共享(CORS)问题?-icode9专业技术文章分享
- 2024-11-06在高德地图中怎么取经纬度-icode9专业技术文章分享
- 2024-11-06如何计算两个GPS坐标之间的距离-icode9专业技术文章分享
- 2024-11-06可视化的操作流程步骤是什么-icode9专业技术文章分享
- 2024-11-06TypeScript面试真题详解与实战攻略
- 2024-11-06TypeScript大厂面试真题解析与实战教程
- 2024-11-05Snowflake Cortex大语言模型函数:让AI数据查询更简单高效
- 2024-11-05Azure开发更轻松:VS Code中的GitHub Copilot for Azure公测版
- 2024-11-05Databricks与Snowflake:数据处理实力大比拼
- 2024-11-05Sealos Devbox 使用教程:使用 Cursor 开发一个高仿苹果官网