当前位置: 首页 > news >正文

【数据结构】——队列

一、队列的概念和结构

 概念:

只允许在⼀端进⾏插⼊数据操作,在另⼀端进⾏删除数据操作的特殊线性表,队列具有先进先 出FIFO(First  In First Out)。

入队:进行数据插入的一端叫做队尾

出队:进行删除操作的一端叫做队头

如下图所示:

结构:

队列的实现其底层结构和我们上一节学习的栈一样,其可以使用数组和链表进行实现,不过我们分析一下那种实现方法更优呢,我们的队列其是一端进,另外一端出那么我们的头尾都要进行操作,那么我们如果选择的是数组,如果是让数组的尾部为队尾,那么我们插入数据的时间复杂度为O(1),然后我们就只能选择在数组的头部为队头了,那么我们的数据删除就为头插,那么我们删除数组的头元素的话,那么我们的后面元素就要往前移动,那么此时的时间复杂度就为O(n)。

换端也是一样的,我们要是头插,那么就要先将原来的数组的元素都往后移动一位,然后才可以插入数据,时间复杂度也是为O(n)。

那么我们要是使用链表呢,那么我们链表的头插和头删时间复杂度一直都是O(1),那么我们的尾插和尾删呢,我们前面学习的时候会知道,我们要遍历才可以找到尾部,但是我们现在可以使用一个指针,一直记录着当前队列的尾节点的地址,那么我们就不需要遍历了,那么我们此时的时间复杂度就为O(1)了。所以我们下面实现队列我们的底层使用链表进行实现。

二、队列的实现 

1、队列的创建

我们上面提到,我们的队列使用链表来实现会比较好,就是我们要创建一个指针来存储尾节点的地址,这样我们就不需要进行遍历找尾节点了,所以我们可以这么来创建,先创建一个节点的结构体,然后我们再创建一个队列结构体,这个队列结构体的成员就是两个节点指针,一个指针是指向队头,一个是队尾。

如下:

2、队列的初始化

我们创建好一个队列后,最好对其进行初始化,那么我们下面就实现一个对队列的初始化函数,那么,那么我们这个函数传入的参数类型应该为队列结构体类型:Queue*。

然后我们如何进行初始化呢?就是对两个指针变量置空即可。 

3、队列的销毁 

我们上面完成了对队列的创建,那么我们的队列改如何进行销毁呢?

其实很简单,我们就遍历,然后对这个队列的每个节点进行销毁即可。

4、队列的入队

 我们的队列的底层是使用链表创建的,那么我们的队列的入队其实和链表的插入数据差不多,就是还是一样,我们要对当前队列是否为空进行判断,如果为空,我们就要特殊处理一下,如果不是那么我们就正常尾插即可。

5、出队 

我们上面的入队是在链表的尾部进行的,那么根据队列的概念,那么我们的出队就要从链表的头部开始,那么就是我们链表的头删,不过我们还是要注意一个特殊情况,就是我们的链表要进行删除,那么我们的队列需要有内容,所以我们先判断这个队列是否有内容,然后就是我们的头删,那么我们的删除是让我们的头节点变成队列当前头节点的下一个节点,那么当我们此时就只有一个元素的时候,就没有下一个节点的情况了,所以对于只有一个节点的情况,那么我们要特殊处理一下。

代码如下:

6、取队头元素

取队头元素,那么我们就是取链表的头节点的元素

代码如下:

7、取队尾元素 

 取队尾元素,那么就取这个链表的尾节点元素,我们的队列结构在创建的时候,我们的ptali指针就是指向的尾部,所以我们直接访问即可。

那么我们的队列的功能的实现就基本完成了,后面我们会进行三道栈和队列的相应的题目进一步巩固我们栈和队列的学习。

谢谢大家的观看。

相关文章:

  • web:InfiniteScroll 无限滚动
  • iOS safari和android chrome开启网页调试与检查器的方法
  • 基于Vue3.0的高德地图api教程005:实现绘制线并编辑功能
  • iOS即时通信的技术要点
  • fiddler 配置ios手机代理调试
  • AI赋能:构建个性化智能学习规划系统
  • 专题二:二叉树的深度搜索(求根节点到叶节点数字之和)
  • 第三方软件测评中心分享:软件功能测试类型和测试工具
  • 极狐GitLab 通用软件包存储库功能介绍
  • 点下4个Winform UI开源控件库
  • 养生:拥抱健康生活的全方位指南
  • c语言第一个小游戏:贪吃蛇小游戏03
  • 开源链动2+1模式AI智能名片S2B2C商城小程序赋能新微商服务能力升级研究
  • 《Python星球日记》 第66天:序列建模与语言模型
  • Python的安装使用
  • 医学影像处理与可视化:从预处理到 3D 重建的技术实践
  • python3数据类型
  • 大语言模型强化学习双强:OpenRLHF与verl技术解析
  • 精益数据分析(56/126):创业阶段的划分与精益数据分析实践
  • C++ string比较、string随机访问、string字符插入、string数据删除
  • 世贸组织欢迎中美经贸高层会谈取得积极成果
  • 在地球另一端的交流,架起2万公里间更多共赢的桥梁
  • 马上评丨全民定制公交,打开城市出行想象空间
  • 中信银行:拟出资100亿元全资设立信银金融资产投资有限公司
  • 金融监管总局:近五年民企贷款投放年平均增速比各项贷款平均增速高出1.1个百分点
  • 明星站台“胖都来”背后:百元起录视频,20万可请顶流