#include<stdio.h>
#include<stdlib.h>
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear;
}LinkQueue;
//初始化
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));//建立头节点
Q.front->next=NULL;
}
//判队空
bool IsEmpty(LinkQueue Q){
if(Q.front==Q.rear)
return true;
else
return false;
}
//入队
void EnQueue(LinkQueue &Q,int x){
LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=x;
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
}
//出队
bool DeQueue(LinkQueue &Q,int &x){
if(Q.front==Q.rear)//队空
return false;
LinkNode *p=Q.front->next;//front 指向头节点
x=p->data;
Q.front->next=p->next;
if(Q.rear==p)//如果原队列中只有一个节点,删除后变空
Q.rear=Q.front;
free(p);
return true;
}
//打印队列
bool PrintQueue(LinkQueue Q){
if(IsEmpty(Q))
return false;
LinkNode *p=Q.front->next;
for(;p!=NULL;p=p->next){
printf("%d ",p->data);
}
return true;
}
int main(){
LinkQueue Q;
int x;
InitQueue(Q);
EnQueue(Q,1);
EnQueue(Q,2);
EnQueue(Q,3);
EnQueue(Q,4);
EnQueue(Q,5);
DeQueue(Q,x);
printf("出队:%d\n",x);
DeQueue(Q,x);
printf("出队:%d\n",x);
PrintQueue(Q);
}
运行结果:
出队:1
出队:2
3 4 5