#include<stdio.h>
#include<stdlib.h>
#define max 100
typedef int ElemType;

typedef struct QueueNode{
ElemType data;
struct QueueNode *next;
}QueueNode;

typedef struct{
QueueNode* front;
QueueNode* rear;
}Queue;

//初始化
Queue* initQueueNode() {
QueueNode* node = (QueueNode*)malloc(sizeof(QueueNode));//node是头结点
Queue* q = (Queue*)malloc(sizeof(Queue));
node->data = 0;
node->next = NULL;
q->front = node;
q->rear = node;
return q;
}

//判断是否为空
int isEmpty(Queue* q) {
if (q->front == q->rear) {
return 1;
}
else {
return 0;
}
}

//入队
void inQueue(Queue *q, ElemType e) {
QueueNode node = (QueueNode)malloc(sizeof(QueueNode));
node->data = e;
node->next = NULL;
q->rear->next = node;//把node赋给尾巴的下一个
q->rear = node;// 之后再让尾巴变成node
}

//出队
int outQueue(Queue *q, ElemType *e) {
if (isEmpty(q)) {
printf(“空的”);
return 0;
}
QueueNode *node = q->front->next;//q->front指向头结点,node就是头结点的下一个节点
*e = node->data;
q->front->next = node->next;
if (q->rear == node) {
q->rear = q->front;
}
free(node);
return 1;
}

int main() {
Queue* q = initQueueNode();
inQueue(q, 10);
inQueue(q, 20);
inQueue(q, 30);
ElemType e;
outQueue(q, &e);
printf(“%d”, e);
return 0;
}