欢迎来到我的:世界
希望作者的文章对你有所帮助,有不足的地方还请指正,大家一起学习交流 !
前言
国庆到了,也要内卷一下,感谢所以老铁们的支持!😎
队列的实现
1、队列的定义
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头;
队头(Front):允许删除的一端,又称队首。
队尾(Rear):允许插入的一端。
空队列:不包含任何元素的空表。
链式队列存储类型:
typedef int QDatatype;
typedef struct QueueNode
{
QDatatype val;//记录每个节点的值
struct QueueNode* next;//下一个节点
}QueueNode;
typedef struct Queue
{
QueueNode* head;//队列的头指针
QueueNode* tail;//队列的尾指针
int size;//记录队列的元素个数,开始为0;
}Queue;
队列的常见基本操作:
//初始化队列,构造一个空队列pd。
void QueueInit(Queue* pd);
//清除队列,将队列清除,以免空间泄露
void Queuedestroy(Queue* pd);
//入队,若队列pd未满,将x加入,使之成为新的队尾。
void Queuepush(Queue* pd, QDatatype x);
//出队,若队列pd非空,删除队头元素。
void QueuePop(Queue* pd);
//读取队头元素值,并返回值
QDatatype QueueFront(Queue* pd);
//判队列空,若队列pd为空返回true,否则返回false。
bool QueueEmpty(Queue* pd);
链队列初始化
void QueueInit(Queue* pd)
{
//构造一个空队列
pd->head = pd->tail = NULL;
pd->size = 0;
}
链队列入队
void Queuepush(Queue* pd, QDatatype x)
{
assert(pd);
QueueNode