数据结构与算法-队列

队列

队列的定义:
队列是只允许在一端进行插入操作而在另一端进行删除操作的线性表。
队列是一种先进先出的线性表,简称FIFO(First In Last Out)。
允许插入的一段称为队尾,允许删除的一端称为对头。
一般的入队操作O(1):
Front为对头指针,Rear为队尾指针,初始队尾指向对头,当进入一个元素,队尾指针往后移动指向元素,对头指针不变。
一般的出队操作O(n):
当出去一个元素的时候,元素前移,队尾指针也前移。
队列接口Queue:
在这里插入图片描述
队列的实现:
在这里插入图片描述
队列顺序存储结构的弊端:
队列的顺序存储结构本身是由ArrayList实现的
在数据元素入队时,相当于在ArrayList的表尾添加元素
在数据元素出队时,相当于在ArrayList的表头删除元素
很明显入队的时间复杂度o(1)出队的时间复杂对为o(n)
线性表增删数据元素时间复杂度都是o(n),但这是按平均算的
队列的出队时间复杂对O(n),可不是按平均算的,因为每次出队都是O(n)。
出队操作只有队尾指针在动,对头指针不动,所以每次都是O(n)
为了更好的利用时间复杂度,优化队列,将队列的头尾指针一起移动,变成循环队列。

循环队列

优化队列第一步:
将头尾指针一起移动,当进入一个新元素,尾指针往后移动,当删除一个元素时,头指针向前移动,这样入队和出队的操作都是O(1)。
但是当队列满了后,尾指针不能再继续往后移动了,还浪费了一些之前删除所消耗的时间。
优化队列第二步:
当队尾或队头指针到达尾部时,如需后移可以重新指向表头。
在这里插入图片描述
这样可以解决浪费空间的问题
如何判断队列已满,队列为空?
队列已满为:(Rear+1)%nFront
队列为空为:Rear
Front
优化第三步:
将一个空间预留出来不存任何元素,尾指针始终指向这个null空间
然后头尾互连,进行循环,变成循环队列。
循环队列的实现:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值