#include #include typedef struct Node { int data; // 存储队列元素 struct Node *next; // 指向下一个节点的指针 } QNode, *QueuePtr; typedef struct { QueuePtr front; // 队列头指针,指向队列头节点 QueuePtr rear; // 队列尾指针,指向队列尾节点的下一个位置 } LinkQueue; // 初始化队列 void initQueue(LinkQueue *queue) { queue->front = queue->rear = (QueuePtr) malloc(sizeof(QNode)); // 创建头节点 if (!queue->front) { exit(-1); // 内存分配失败,退出程序 } queue->front->next = NULL; // 头节点的下一个节点为空 } // 判断队列是否为空 int queueEmpty(LinkQueue *queue) { if (queue->front == queue->rear) { return 1; // 队列为空 } else { return 0; // 队列不为空 } } // 入队操作 void enQueue(LinkQueue *queue, int x) { QueuePtr p = (QueuePtr) malloc(sizeof(QNode)); // 创建一个新节点 if (!p) { exit(-1); // 内存分配失败,退出程序 } p->data = x; // 新节点存储元素值 p->next = NULL; // 新节点的下一个节点为空 queue->rear->next = p; // 将新节点插入队尾 queue->rear = p; // 修改队尾指针 } // 出队操作 int deQueue(LinkQueue *queue) { if (queueEmpty(queue)) { exit(-1); // 队列为空,无法出队,退出程序 } QueuePtr p = queue->front->next; // 获取队头节点 int x = p->data; // 获取队头节点的元素值 queue->front->next = p->next; // 将队头节点从队列中删除 if (queue->rear == p) { // 如果队头节点是队列中的最后一个节点 queue->rear = queue->front; // 修改队尾指针 } free(p); // 释放队头节点的内存 return x; // 返回队头元素值 }