栈是一种操作所限的线性表,只能在栈顶添加(push)或者删除元素(pop),满足后进先出,先进后出的特性.
栈的底层既可以使用数组来实现,也可以用链表来实现,前者叫顺序栈,后者叫链表栈.
栈的应用:
- 函数堆栈
- 栈在表达式求值中的应用
- 栈在括号匹配中的应用({[]})
队列最大的特点就是先进先出,主要的两个操作是入队和出队。跟栈一样,它既可以用数组来实现,也可以用链表来实现。用数组实现的叫顺序队列,用链表实现的叫链式队列。特别是长得像一个环的循环队列。在数组实现队列的时候,会有数据搬移操作,要想解决数据搬移的问题,我们就需要像环一样的循环队列。
用链表实现的队列时一个无界队列,用数组实现的队列时一个有界队列。对于像线程池队列这种场景,系统的线程资源是有限的,使用有界队列更合理一些。
题号 | 题目链接 | 答案链接 | 难度 | 完成度 |
---|---|---|---|---|
20 | 有限的括号 | isValid | easy | ✅ |
155 | 最小栈 | MinStack | easy | ✅ |
32 | 最长有效括号 | longestValidParentheses | ✨✨✨ | ✅ |
150 | 逆波兰表达式求值 | evalRPN | ✨✨ | ❌ |
641 | 设计循环双端队列 | MyCircularDeque | ✨✨ | ❌ |
239 | 滑动窗口最大值 | maxSlidingWindow | ✨✨✨ | ❌ |
题号 | 题目链接 | 答案链接 | 难度 | 完成度 |
---|---|---|---|---|
-- | 剑指Offer(五):用两个栈实现队列 | queueByStack | ✨ | ✅ |