1.初始化链式队列:带头结点
2.入队
3.出队
4.输出队列
链式队列用单链表来实现,所以掌握了单链表就掌握了链式队列。
不同的是,在定义结点、定义队列时和单链表有点区别。链式队列比单链表多了两个指针,分别指向队头和队尾结点,所以定义队列时,不仅定义结点,还要定义这两个指针。
#include <iostream> #include <stdlib.h> using namespace std; typedef int ElemType; //链式队列结点 typedef struct LinkNode{ ElemType data; struct LinkNode *next; }LinkNode; //链式队列指针 typedef struct LinkQueue{ LinkNode *front,*rear; }LinkQueue; void InitQueue(LinkQueue &Q);//初始化链式队列:带头结点 void EnQueue(LinkQueue &Q,ElemType x);//入队 bool DeQueue(LinkQueue &Q,ElemType x);//出队 bool OutPutQueue(LinkQueue Q);//输出队列 //初始化:带头结点 void InitQueue(LinkQueue &Q){ Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode));//建立头结点 Q.front->next=NULL; } //入队 void EnQueue(LinkQueue &Q,ElemType x){ LinkNode *s; s=(LinkNode *)malloc(sizeof(LinkNode)); s->data=x; s->next=NULL; Q.rear->next=s; Q.rear=s; } //出队 bool DeQueue(LinkQueue &Q,ElemType x){ if(Q.front==Q.rear)return false; LinkNode *p=Q.front->next; x=p->data; Q.front->next=p->next; if(Q.rear==p){ Q.rear=Q.front; } free(p); return true; } //输出队列 bool OutPutQueue(LinkQueue Q){ if(Q.front==Q.rear){ printf("队列为空\n"); return false; } LinkNode *p=Q.front->next; while(p!=NULL){ printf("%d ",p->data); p=p->next; } return true; } int main(){ ElemType x; LinkQueue Q; InitQueue(Q); EnQueue(Q,1); EnQueue(Q,2); EnQueue(Q,3); EnQueue(Q,4); EnQueue(Q,5); DeQueue(Q,x); DeQueue(Q,x); DeQueue(Q,x); DeQueue(Q,x); DeQueue(Q,x); if(DeQueue(Q,x)){ printf("出队成功\n"); }else{ printf("出队失败\n"); } OutPutQueue(Q); return 0; }