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
62 lines
1.8 KiB
2 years ago
|
#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; // 返回队头元素值
|
||
|
}
|