You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.8 KiB

#include <stdio.h>
#include <stdlib.h>
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; // 返回队头元素值
}