栈与队列
栈
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接口,并且在尾部添加和移除元素的操作具有较低的时间复杂度。