Java数据结构学习笔记----栈与队列(二)

栈与队列


1、 栈也是一种线性数据结构
规定只能从栈顶添加元素,也只能从栈顶取出元素
在这里插入图片描述
2、栈的具体实现

在这里插入图片描述

3、时间复杂度分析

在这里插入图片描述
例题:
20. 有效的括号 - 力扣(LeetCode)

特殊的数据结构:单调栈

单调栈实际上还是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内元素都保持单调。
(多用于解决下一个更大元素这种类型的题)
例题:
496. 下一个更大元素 I - 力扣(LeetCode)

使用单调栈
这个问题可以抽象思考:把数组中的元素想象成排队站立的人,元素的大小想象成人的身高。这些人面对你站成一列,如何求元素“2”的
Next Greater Element?
如果能够看到元素“2”,那么他后面可见的第一个人就是“2”的Next Greater Element,因为比“2”小的元素都被“2”遮挡住了,第
一个露出的就是答案。
在这里插入图片描述

队列

1、队列也是一种线性数据结构
只能从一端(队尾)添加元素,从另一端(队首)取出元素
在这里插入图片描述
队列是一种先进先出的数据结构

2、队列的实现
在这里插入图片描述

3、数组队列的问题
其中dequeue()操作的时间复杂度为O(n),原因时在出队时,数组后面的元素都要进行前移。
在这里插入图片描述

删除队首元素a后,
在这里插入图片描述

为了解决前移的问题,可以使用front记录队首位置,使用tail记录队尾位置,这就是循环队列。
情况一:
在这里插入图片描述

情况二:
在这里插入图片描述

情况三:

在这里插入图片描述

4、循环队列的复杂度分析

在这里插入图片描述

特殊队列:双端队列(ArrayDeque)
ArrayDeque是一种基于数组的双端队列实现,它同样实现了Queue接口,并且在尾部添加和移除元素的操作具有较低的时间复杂度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值