队列,是一种先进先出的线性表,它只允许在队头删除,在队尾插入,链式队列和单链表操作类似,但是有队首指针和队尾指针,下面是链式队列的表示和实现:
#include <iostream> using namespace std; //队列的链式表现与实现 struct QNode { int data; QNode *next; }; struct LinkQueue { QNode * front; QNode * rear; }; //初始化链式队列 LinkQueue * InitQueue() { LinkQueue*lq = (LinkQueue*)malloc(sizeof(LinkQueue)); if (!lq) { return NULL; } lq->front=NULL; lq->rear=NULL; return lq; } void DestoryQueue(LinkQueue *lq) { while(lq->front) { QNode *p=lq->front->next; free(lq->front); lq->front=p; } } //插入元素e 队尾元素 插入时候先判断队列是否为空 bool EnQueue(LinkQueue *lq,int e) { QNode *p=(QNode*)malloc(sizeof(QNode)); if (p!=NULL) { p->data=e; p->next=NULL; if (lq->front==NULL&&lq->front==NULL)//判断空 { lq->front=p; } else { lq->rear->next=p; } lq->rear=p;//队尾指针需要移到最后 return true; } return false; } //删除队首元素 删除前先验空 e返回删除元素 bool DeQueue(LinkQueue *lq,int &e) { if (lq->front==NULL&&lq->front==NULL) { return false; } QNode *qnode = lq->front; e=qnode->data; lq->front=qnode->next; free(qnode); return true; } void PrintQueue(LinkQueue *lq) { if (lq->front==NULL&&lq->front==NULL) { cout<<"sorry ,the queue is empty"<<endl; return; } cout<<"Now print the queue:"<<endl; QNode *p=NULL; p=lq->front; while(p) { cout<<p->data<<endl; p=p->next; } } void main() { LinkQueue *lq=NULL; if (!InitQueue()) { cout<<"Initial Fail!"<<endl; } lq=InitQueue(); 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);//打印队列 }
执行结果如下图: