认识栈结构
封装栈结构
栈练习
LeetCode
LeetCode#682棒球比赛:使用栈思想来模拟,遇到整数X就是入栈,D就是栈顶元素*2再入栈,C就是出栈栈顶元素,+就是把栈顶的两个元素相加,最后把栈中所有元素相加返回即可。
LeetCode#844比较含退格的字符串:使用栈来存储数据,遍历字符串,遇到’#’就出栈栈顶元素,否则之间入栈
LeetCode#946验证栈序列:使用栈来辅助,遍历Pushed数组,判断是否与popped数组的当前元素相等…
LeetCode#20有效的括号:使用栈来辅助,()可以看成一件完整的事件,(代表事件开始,)代表事件结束,可以使用栈来模拟
LeetCode#1021删除最外层的括号:首先我们解决这道题的关键在于需要知道哪些是需要去除的外层括号设置一个cnt计算左括号和右括号的差值,遇到左括号相当于入栈,cnt + 1, 遇到右括号相当于出栈 cnt - 1这样,一对有效保留的括号,总共让计数器归零,若不归零,则代表当前遍历到的括号中,一定存在多余括号
LeetCode#1249删除无效的括号,使用两个栈来存储多余括号的索引,分别存储左括号和右括号,当遍历完后,栈中的索引为多余的,删除即可
LeetCode#227基本计算器II: 使用两个栈来辅助,一个用于存储操作数,一个用于存储操作符(需要额外注意的是操作符之间的顺序,我们可以判断当前入栈的操作符的优先级是否大于当前操作符栈中栈顶操作符的优先级(当前入栈的优先级小于栈顶的优先级,那么需要先进行数据操作,再把操作符入栈),从而区分,另外还有一个小技巧:我们还可以为字符串添加一个优先级最低的特殊符合,这样的话,当这个符合入栈时,会自动帮助我们计算之前的值,而不用特地去操作一遍)