typedef struct LinkNode{ //链式队列结点
int data;
struct LinkNode *next;
}LinkNode;
typedef struct{ //链式队列
LinkNode *front,*rear; //队列头指针和尾指针
}LinkQueue;
void InitQueue(LinkQueue &Q){
//初始时,rear front都指向头结点
Q.rear=Q.front=(LinkNode*)malloc(sizeof(LinkNode));
Q.front->next=NULL;
//不带头结点时
Q.rear=NULL;
Q.front=NULL;
}
//入队
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;
//不带头结点
if(Q.front==NULL){
Q.front=s;
Q.rear=s;
}
else{
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;
x=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return true;
}
//出队(不带头结点)
bool DeQueue(LinkQueue &Q,int &x){
if(Q.front==NULL) return false;
LinkNode *p=Q.front;
x=p->next;
if(Q.front==p){
Q.front=NULL;
Q.rear=NULL;
}
free(p);
return true;
}