【玩转栈和队列②】队列的C语言实现(动图演绎)

一、前言

🐱‍💻文章难度: ★☆☆☆☆
🐱‍👤适合对象:C语言玩家 + 栈和队列初学者
🐱‍🐉知识储备:栈和队列的实现基于顺序表和链表
🐱‍🚀专栏宣传:算法入门系列长期更新,欢迎点赞收藏,祝大家学有所获。
🐱‍👓代码仓库:罅隙/数据结构【完整代码请参见Gitee仓库】

二、什么是队列

①基础概念:
 队列是只允许在一端进行插入操作,另一端进行删除操作的一种数据结构。进行删除的一端称为队头,插入的一端称为队尾。

②结构特点:
 队列中的元素具有先进先出的的特点。通俗的说就像生活中的排队点餐——先排队的先点到餐。

③彩图讲解:
在这里插入图片描述

三、队列的C语言实现

①实现方式的选择
 就像我们上一节所讲讲解的栈一样,队列既可以通过顺序表来实现,也可以通过链表来实现。但结合我们之前所讲解的知识,用链表来实现队列更优,因为对于链表来说头插和尾插非常的轻松,且可以按需申请空间。所以接下来我们通过链表来实现我们的队列。

②队列的链表形式定义
在这里插入图片描述
【关键点讲解】

  1. 重命名数据类型便于进行全局队列内数据类型的修改
  2. 我们的队列是基于单链表实现的
  3. 队列里分别有头指针和尾指针,分别便于我们出队和入队操作

四、QueueInit()初始化接口

①接口作用:初始化队列

②源码剖析:在这里插入图片描述> 【关键点讲解】> 1. 初始时头尾指针置为NULL。入队时再开辟空间

五、QueuePush()入队接口

①接口作用:从队尾压入一个元素

②动图演示:
在这里插入图片描述

③源码剖析
在这里插入图片描述
【关键点讲解】

  1. 别忘记将next指针置为NULL
  2. 注意要判断队列是否为空
  3. 注意插入元素后尾指针需要更新

五、QueuePop()出队接口

①接口作用:弹出队首的元素

②动图演示:
在这里插入图片描述

③源码剖析
在这里插入图片描述【关键点讲解】

  1. 注意判断pop掉当前元素如果队列为空,head和tail都要置为NULL
  2. 注意别想错free(q)了,free的是动态开辟出来的内存

六、QueueFront()接口

①接口作用:返回队首元素值

②源码剖析:
在这里插入图片描述

七、QueueBack()接口

①接口作用:返回队尾的元素值

②源码剖析:在这里插入图片描述

八、QueueSize()接口

①接口作用:返回队尾中的元素个数

②源码剖析:
在这里插入图片描述
【关键点讲解】

  1. 当然也可以在定义的时候额外增加上“sz”这个成员,这样就不需要额外的函数

九、QueueEmpty()接口

①接口作用:判断队列是否为空

②源码剖析:
在这里插入图片描述

十、QueueDestroy()接口

①接口作用:销毁队列

②动图演示:
在这里插入图片描述

③源码剖析
在这里插入图片描述
【关键点剖析】

  1. 记录下一结点,将当前结点free
  2. 注意不要把q给free了

十一、后记

  • 创作不易,点个赞鼓励一下吧
  • 有问题欢迎交流讨论。博主QQ:2879377052
  • 完整的代码请参见代码前言里的代码仓库
    在这里插入图片描述
  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罅隙`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值