「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」
💦 队列的概念及结构
1 | sql复制代码相比栈,队列的特性和栈是相反的。 |
队列的拓展:
实际中我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型时可以使用循环队列。环形队列可以使用数组实现,也可以使用循环链表实现。
为了能使用Q.rear == Q.front 来区别是队空还是队满,我们常常认为出现左图时的情况即为队空的情况,此时: rear == front;而右图的情况即为队满的情况,此时:rear + 1 == front
关于环形队列在下面的的栈和队列面试题中会讲到
队列的应用:
1️⃣ 实际中要保证公平排队的地方可以用它
2️⃣ 广度优先遍历
💦 队列的实现
这里对于队列的实现我们使用链表的方式
1.初始化
函数原型
函数实现
1 | c复制代码void QueueInit(Queue* pq) |
2.插入
函数原型
函数实现
1 | c复制代码void QueuePush(Queue* pq, QDataType x) |
3.判空
函数原型
函数实现
1 | c复制代码bool QueueEmpty(Queue* pq) |
4.删除
函数原型
函数实现
1 | c复制代码void QueuePop(Queue* pq) |
5.长度
函数原型
函数实现
1 | c复制代码QDataType QueueSize(Queue* pq) |
6.取头
函数原型
函数实现
1 | c复制代码QDataType QueueFront(Queue* pq) |
7.取尾
函数原型
函数实现
1 | c复制代码QDataType QueueBack(Queue* pq) |
8.销毁
函数原型
函数实现
1 | c复制代码void QueueDestory(Queue* pq) |
💦 完整代码
这里需要三个文件
1️⃣ Queue.h,用于函数的声明
2️⃣ Queue.c,用于函数的定义
3️⃣ Test.c,用于测试函数
🧿 Queue.h
1 | c复制代码#pragma once |
🧿 Queue.c
1 | c复制代码#include"Queue.h" |
🧿 Test.c
1 | c复制代码#include"Queue.h" |
本文转载自: 掘金