首页 > 代码库 > 队列(链式)
队列(链式)
队列,是一种先进先出的线性表,它只允许在队头删除,在队尾插入,链式队列和单链表操作类似,但是有队首指针和队尾指针,下面是链式队列的表示和实现:
#include <iostream>using namespace std;//队列的链式表现与实现struct QNode{ int data; QNode *next;};struct LinkQueue{ QNode * front; QNode * rear;};bool InitQueue(LinkQueue &q){ q.front=q.rear=(QNode*)malloc(sizeof(QNode)); if (!q.front) { return false; } q.front->next=NULL; return true;}bool DestoryQueue(LinkQueue &q){ while(q.front) { q.rear=q.front->next; free(q.front); q.front=q.rear; } return true;}//插入元素e 队尾元素bool EnQueue(LinkQueue &q,int e){ QNode *p=(QNode*)malloc(sizeof(QNode)); if (!p) { return false; } p->data=http://www.mamicode.com/e; p->next=NULL; q.rear->next=p; q.rear=p;//队尾指针需要移到最后 return true;}bool DeQueue(LinkQueue &q,int &e){ if (q.front==q.rear) { return false; } QNode *p = q.front->next; e=p->data; q.front->next=p->next; if (q.rear==p)//队尾指针不能丢 需要指向头结点 { q.rear=q.front; } free(p); return true;}void PrintQueue(LinkQueue &q){ if (q.front==q.rear) { cout<<"sorry ,the queue is empty"<<endl; return; } cout<<"Now print the queue:"<<endl; QNode *p=NULL; p=q.front->next; while(p) { cout<<p->data<<endl; p=p->next; }}void main(){ LinkQueue lq={0}; if (InitQueue(lq)) { cout<<"Initial Success!"<<endl; } int ElemNum=0; cout<<"请输入要插入元素的个数:"; cin>>ElemNum; int Elem=0; for (int i=0;i<ElemNum;i++) { cout<<"请输入要插入第 "<<i+1<<" 个元素:"; cin>>Elem; if (EnQueue(lq,Elem)) { cout<<"插入成功"<<endl;; } } PrintQueue(lq);//打印队列 int delnum; DeQueue(lq,delnum);//删除第一个元素 cout<<"the delete num is :"<<delnum<<endl; PrintQueue(lq);//打印队列 DestoryQueue(lq);//销毁队列 PrintQueue(lq);//打印队列}
执行结果如下图:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。