#include <stdio.h>
#include <stdlib.h>

enum
{
    FALSE,
    TRUE
};

typedef int dataType;

typedef struct node
{
    dataType data;
    struct node *next;
}node;

typedef struct linkQuene
{
    node *front;
    node *tail;
}linkQuene;

void initLinkQuene(linkQuene *q)
{
    node *temp=malloc(sizeof(node));//浪费一个节点的空间,保存首个q->front和q->tail的地址
    q->front=q->tail=temp;
    temp->next=NULL;
}

int enterOfQuene(linkQuene *q,int numberOfEnterQuene)
{
    node *temp=(node *)malloc(sizeof(node));
    if (temp==NULL) {
        return FALSE;
    }
    temp->data=numberOfEnterQuene;
    temp->next=NULL;
    q->tail->next=temp;
    q->tail=temp;
    return TRUE;
}

int outOfQuene(linkQuene *q,int *numberOfOutOfQuene)
{
    if (q->front->next==NULL) {
        return FALSE;
    }
    node *temp=q->front->next;
    *numberOfOutOfQuene=temp->data;
    q->front->next=temp->next;
    if (q->front->next==NULL) {  //这是为了在队列为空时,使得q->tail重新回到初始化状态,这样下一次可以顺利入队!
        q->tail=q->front;
    }
    free(temp);
    return TRUE;
}

int main(void)
{
    linkQuene q;
    initLinkQuene(&q);
    
    int temp;
    for (int i=0; i<8; i++) {
        enterOfQuene(&q, i+1);
    }
    
    for (int i=0; i<8; i++) {
        outOfQuene(&q,&temp);
        printf("%d",temp);
    }
    printf("\n");
    return 0;
}