首页 > 代码库 > 队列(顺序)
队列(顺序)
顺序队列是一段连续的地址,但是存在假溢出情况,所以要用循环队列来实现,具体操作像钟表
下面是顺序队列的表示与实现:
#include <iostream>using namespace std;//顺序循环队列的基本表示和实现const int MAX_SIZE = 100;//定义队列长度struct SqQueue{ int * base; int front ; int rear;};//初始化队列 注意队尾队首指针的初始化bool InitQueue(SqQueue &sq){ sq.base=(int*)malloc(sizeof(int)); if (!sq.base) { return false; } sq.front=sq.rear=0; cout<<"Initial Queue Successfully!"<<endl; return true;}//返回队列的长度int QueueLength(SqQueue &sq){ return (sq.rear-sq.front+MAX_SIZE)%(MAX_SIZE);}//插入元素e为 队列的队尾元素bool EnQueue(SqQueue &sq,int e){ if ((sq.rear+1)%(MAX_SIZE)==sq.front)//循环队列 判断队列是否满了 { cout<<"sorry ,overflow"<<endl; return false; } sq.base[sq.rear]=e; sq.rear=(sq.rear+1)%MAX_SIZE;//如果钟表走到12点 下一个将走到1点 return true;}//删除队首元素 用e返回bool DeQueue(SqQueue &sq,int &e){ if (sq.front==sq.rear)//判断队列是否为空 { cout<<"Sorry,the queue is empty"<<endl; return false; } e=sq.base[sq.front]; sq.front=(sq.front+1)%MAX_SIZE; return true;}//打印队列void PrintQueue(const SqQueue sq){ if (sq.rear==sq.front) { cout<<"Sorry,the queue is empty"<<endl; return; } cout<<"Now print the new queue:"<<endl; int index=0; index=sq.front; while (index!=sq.rear) { cout<<sq.base[index]<<endl; index=(index+1)%MAX_SIZE; }}void main(){ SqQueue sq={0}; InitQueue(sq); int ElemNum=0; cout<<"请输入要插入元素的个数:"; cin>>ElemNum; int Elem=0; for (int i=0;i<ElemNum;i++) { cout<<"请输入要插入第 "<<i+1<<" 个元素:"; cin>>Elem; if (EnQueue(sq,Elem)) { cout<<"插入成功"<<endl;; } } PrintQueue(sq);//打印队列 int delnum; DeQueue(sq,delnum);//删除第一个元素 cout<<"the delete num is :"<<delnum<<endl; PrintQueue(sq);//打印队列 DeQueue(sq,delnum); DeQueue(sq,delnum); PrintQueue(sq);//打印队列}
结果如下图所示:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。