第五章 栈与队列part01
理论基础
了解一下 栈与队列的内部实现机制,文中是以C++为例讲解的。
文章讲解:programmercarl.com/%E6%A0%88%E…
232.用栈实现队列
大家可以先看视频,了解一下模拟的过程,然后写代码会轻松很多。
题目链接/文章讲解/视频讲解:programmercarl.com/0232.%E7%94…
225. 用队列实现栈
可能大家惯性思维,以为还要两个队列来模拟栈,其实只用一个队列就可以模拟栈了。
建议大家掌握一个队列的方法,更简单一些,可以先看视频讲解
题目链接/文章讲解/视频讲解:programmercarl.com/0225.%E7%94…
20. 有效的括号
讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。
大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。
题目链接/文章讲解/视频讲解:programmercarl.com/0020.%E6%9C…
1047. 删除字符串中的所有相邻重复项
栈的经典应用。
要知道栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了 遍历数组当前元素时候,前一个元素是什么。
题目链接/文章讲解/视频讲解:programmercarl.com/1047.%E5%88…
笔记
用栈实现队列
- 用两个栈,一个输入栈,一个输出栈;
- push:直接调输入栈的push
- pop:判断输出栈是有为空,不为空则直接调输出栈的pop;为空,则将输入栈中的元素按顺序pop出来再push津输出栈;然后再调用输出栈的pop;
- peek:调用前面的pop,记住这个值,将这个值重新push进输出栈;返回这个值;
- empty:输入栈和输出栈均为空
用队列实现栈
- 用一个队列;
- push:直接调队列的push;
- pop: 判断队列是否为空;不为空则直接调用队列的shift;为空,则先shift队列的size-1个元素,然后再push进队列,然后再shift;
- top:调用前面的pop,记住这个值,仔将这个值重新push进队列,返回这个值;
- empty:队列为空;
有效括号
- 创建一个栈;
- 遍历字符串,遇到‘(’,栈中压入‘)’;遇到‘【’,栈中压入‘】’;遇到‘{',压入’}';如果遇到的是右括号并且不等于栈中pop的元素,则返回false;
- 循环外返回栈的长度是否为0;
删除字符串中的所有相邻重复项
- 创建一个栈
- 遍历字符串,判断栈中是否有当前遍历的元素,有的话栈直接pop,没有就将当前元素push进去
- 循环外将栈转换为字符串返回;