C/C++实现链式队列
作者:互联网
基本功能
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;
}
标签:队列,DeQueue,LinkQueue,C++,next,链式,front,LinkNode 来源: https://blog.csdn.net/weixin_44915226/article/details/118079198