队列,是一种先进先出的线性表,它只允许在队头删除,在队尾插入,链式队列和单链表操作类似,但是有队首指针和队尾指针,下面是链式队列的表示和实现:
#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=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);//打印队列 }
执行结果如下图:
队列(链式)
时间: 2024-10-06 00:01:48