parent
f4f585d901
commit
fe6ba4f5e2
@ -0,0 +1,61 @@
|
||||
#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; // 返回队头元素值
|
||||
}
|
Loading…
Reference in new issue