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; }