首页 > 代码库 > 队列的基本操作(链队列)
队列的基本操作(链队列)
队列和栈差不多,唯一的区别就是栈式先进后出(FILO),队列是先进先出(FIFO),队列的示意图如下
其基本操作的代码如下
#include<iostream> #include<cstdlib> using namespace std; struct QNode{ int data; QNode *next; }; typedef QNode *QueuePtr; struct LinkQueue{ QueuePtr front; QueuePtr rear; }; //初始化队列 bool InitQueue(LinkQueue &Q){ Q.front=Q.rear=new QNode; if(!Q.front){ cout<<"初始化失败"<<endl; return false; } Q.front->next=NULL; cout<<"初始化成功"<<endl; return true; } //销毁队列 void DestroyQueue(LinkQueue &Q){ while(Q.front){ Q.rear=Q.front->next; delete (Q.front); Q.front=Q.rear; } cout<<"队列已被销毁"<<endl; } //判断是否为空 bool EmptyQueue(LinkQueue Q){ if(Q.front==Q.rear){ cout<<"队列为空"<<endl; return true; } cout<<"队列不为空"<<endl; return false; } //入队 void EnQueue(LinkQueue &Q,int value){ QueuePtr p=new QNode; p->data=http://www.mamicode.com/value;" 已经入队"<<endl; } //出队(一) void DeQueue(LinkQueue &Q,int &value){ if(Q.front==Q.rear){ cout<<"队列为空"<<endl; return; } QueuePtr p=Q.front->next; //vlaue保存被删的结点数据 value=http://www.mamicode.com/p->data;" 已经出队"<<endl; } //出队(二) void DeQueue2(LinkQueue &Q,int &value){ if(Q.front==Q.rear){ cout<<"队列为空"<<endl; return; } QueuePtr p=Q.front; Q.front=Q.front->next; value=http://www.mamicode.com/p->data;" 已经出队"<<endl; } //队列元素个数 void GetLength(LinkQueue Q,int &length){ length=0; QueuePtr p=Q.front; while(p!=Q.rear){ p=p->next; length++; } cout<<"队列元素个数"<<length<<"个"<<endl; } //显示队列元素 void VisitQueue(LinkQueue Q){ if(Q.front==Q.rear){ cout<<"队列为空"<<endl; return; } QueuePtr p=Q.front; while(p!=Q.rear){ p=p->next; cout<<p->data<<" "; } cout<<endl; } void show(){ cout<<"+----------------------------------+"<<endl; cout<<"| |"<<endl; cout<<"| 1->初始化队列 |"<<endl; cout<<"| 2->判断队列是否为空 |"<<endl; cout<<"| 3->入队 |"<<endl; cout<<"| 4->出队 |"<<endl; cout<<"| 5->显示队列元素 |"<<endl; cout<<"| 6->销毁队列 |"<<endl; cout<<"| 7->队列元素个数 |"<<endl; cout<<"| |"<<endl; cout<<"+----------------------------------+"<<endl; } int main(){ LinkQueue Q; int action,value,length; show(); while(cin>>action){ switch(action){ case 1: system("cls"); InitQueue(Q); break; case 2: system("cls"); EmptyQueue(Q); break; case 3: system("cls"); cout<<"请输入入队的元素"<<endl; cin>>value; EnQueue(Q,value); break; case 4: system("cls"); DeQueue(Q,value); break; case 5: system("cls"); VisitQueue(Q); break; case 6: system("cls"); DestroyQueue(Q); break; case 7: system("cls"); GetLength(Q,length); } system("pause"); system("cls"); show(); } }
一定要注意LinkQueue,QueuePtr,QNode之间的关系,代码中有的地方是结构体的"."(访问),有的地方是"->"访问,顺序要搞清楚,不然会错一片的!
队列的基本操作(链队列)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。