栈和队列——c语言实现队列

本节复习队列。 

首先回顾队列的性质:先入先出。 队列的特点就是先入先出, 先入队列的在队列的头部。 后入队列的在队列的尾部。 

目录

队列的全部接口

准备文件

创建队列的结构体蓝图 

队列的初始化

队尾入队列

对头出队列

获取队列头部元素

获取队列尾部元素

获取队列中有效元素个数

判断队列是否为空

销毁队列


队列的全部接口


//队列的初始化
void QueueInit(Queue* pq);

//队尾入队列
void QueuePush(Queue* pq, QDataType x);

//对头出队列
void QueuePop(Queue* pq);

//获得队列头部元素
QDataType QueueHead(Queue* pq);

//获取队列尾部元素
QDataType QueueTail(Queue* pq);

//获取队列中有效个数
int QueueSize(Queue* pq);

//判断队列是否为空
bool QueueEmpty(Queue* pq);

//队列的销毁
void QueueDestroy(Queue* pq);

---------------------------------------------------------------------------------------------------------------------------------------

准备文件

首先包含三个文件一个main.c文件, 一个.h文件用于函数声明, 还有一个.c文件用于函数的实现

创建队列的结构体蓝图 

首先包含一下头文件,另外冲新定义一下要保存的数据类型。 便于维护。 

然后我们要用链式结构标识队列, 所以需要定义一个链表节点的结构体。 

最后创建队列的结构体。

队列的初始化

链式队列是没有哨兵位的头节点的。 所以在初始化的时候要将队列的头指针和尾指针都置空

.h函数声明

.c函数实现​​​​​​​​​​​​​​​​​​​​​

 --------------------------------------------------------------------------------------------------------------------------------------

队尾入队列

队列符合先入先出。 队列入数据时都是在队尾入数据。 

这里需要注意的是, 当头指针和尾指针都指向空的时候, 也就是队列之中无数据的时候, 应该让队头和队尾都指向该节点。如图

然后剩下的操作就是很简单的单链表尾插。 而且不需要自己遍历找数据, 只需要在tail指针所指向节点之后插入数据即可。

.h函数声明

.c函数实现​​​​​​​​​​​​​​​​​​​​​​​​​​​​

---------------------------------------------------------------------------------------------------------------------------------------

对头出队列

队列符合先入先出的原则, 先入的数据在队头的位置, 数据要从对头出数据。 

对于链式队列来说, 对头出数据就是单链表的头删操作。 

.h函数声明

.c函数实现

----------------------------------------------------------------------------------------------------------------------------------------

获取队列头部元素

队列不同于栈, 栈只能从出数据的一方也就是栈顶获取数据。而队列既可以从出数据的一方获取数据, 又可以从入数据的一方获取数据。 

该函数实现的是从队头获取数据。 也就是head指针所指向节点内保存的数据。

如图

.h函数声明

.c函数实现

---------------------------------------------------------------------------------------------------------------------------------------

获取队列尾部元素

获取队尾数据获取tail指针所指向的数据。

.h函数声明

.c函数实现

---------------------------------------------------------------------------------------------------------------------------------------

获取队列中有效元素个数

队列和栈不同, 队列之中没有专门的成员变量储存队列的数据个数, 所以我们要用单链表的计算节点的方法。 直接定义一个变量, 从队头开始遍历, 计算节点的个数。 

如图:

.h函数声明

.c函数实现

---------------------------------------------------------------------------------------------------------------------------------------

判断队列是否为空

要判断队列是否为空, 只要判断head或者tail指针指向的是否是空。 因为head指针和tail指针除非在队列没有元素的情况下指向空。 其他时候都会指向一个节点。

如图为不断出队列的过程图:

由此我们可以发现, 只有当队列为空的时候, head和tail才会指向空。

.h函数声明.c函数实现

---------------------------------------------------------------------------------------------------------------------------------------

销毁队列

销毁队列的过程和单链表的销毁过程类似。如果忘记的话就复习单链表:线性表——单链表的增删查改-CSDN博客

.h函数声明​​​​​​​​​​​​​​

.c函数实现

  • 27
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值