拉勾教育 重学数据结构与算法 06 | 队列:先进先出的线性表,如何实现增删查?

学习资源:拉勾教育

队列是什么

  • 队列是一种特殊的线性表,与线性表的不同支持体现在对数据的增加和删除的操作上,队列的特点是先进先出
    • 先进——队列的数据新增操作只能在末端进行,不允许在队列的中间某个结点后新增数据
    • 先出——队列的数据删除操作只能在始端进行,不允许在队列的中间某个结点后删除数据
  • 队列存在两种存储方式,即顺序队列和链式队列
    • 顺序队列——依赖数组来实现,其中的数据存在内存中也是顺序存储
    • 链式队列——依赖链表来实现,其中的数据依赖每个结点的指针互联,在内存中并不是顺序存储链式队列,实际上就是只能尾进头出的线性表的单链表

队列对于数据的增删查处理

  • 队列从队头(front)删除元素,从队尾(rear)插入元素
  • 对于一个顺序队列的数组,设置一个front指针来指向队头,并设置另一个rear指针指向队尾,不断进行插入删除操作时,头尾两个指针都会不断向后移动
    在这里插入图片描述
    在这里插入图片描述

front指针删除数据的操作引发了时间复杂度过高的问题,如何解决?可以通过移动指针的方式来删除数据,但是这样又会造成”假溢出“,两个简单粗暴的解决”假溢出“方法:

  1. 不惜消耗O(n)的时间复杂度去移动数据
  2. 开发足够大的内存空间确保数组不会越界

循环队列的数据操作

  • 数组越界问题可以通过队列的一个特殊变种来解决,叫做循环队列
  • 循环队列进行新增数据元素操作时,首先判断队列是否为满
    • 如果不满,则可以将新元素赋值给队尾,然后让rear指针向后移动一个位置
    • 如果已经排到队列最后的位置,则rear指针重新指向头部
  • 循环队列进行删除操作时,即出队列操作,需要判断队列是否为空,然后将队头元素赋值给返回值,front指针指向后移一个位置,如果排到队列最后的位置,就把front指针重新指向到头部
  • 判断循环队列到底是空是满:设置一个标志变量flag

链式队列的数据操作

  • 链式队列是一个单
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值