队列的C语言实现(动图演绎)

372 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、什么是队列

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

②结构特点:  队列中的元素具有先进先出的的特点。通俗的说就像生活中的排队点餐——先排队的先点到餐。   ③彩图讲解: 在这里插入图片描述

二、队列的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了