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

//入队
bool EnQueue(LinkQueue &Q,int x){
    LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));            //创建新结点
    s->data=x;        s->next=NULL;                                //将结点插入到队尾
    Q.rear->next=s;
    Q.rear=s;                                                    //将尾指针指向最后一个结点
    return true;
}

//出队
bool DeQueue(LinkQueue Q,int &x){
    if(Q.front==Q.rear){
        return false;
    }
    LinkNode *p=Q.front->next;                                    //令p指向除头结点外的第一个结点
    x=p->data;
    Q.front->next=p->next;
    if(Q.rear==p){                                                //若原队列中只有一个结点,删除后变空
        Q.rear=Q.front;
    }
    free(p);
    return true;
}

int main(){
    
}