栈和队列你真的会用了么?

12 篇文章 0 订阅

232. 用栈实现队列 - 力扣(LeetCode)
看题解前:用两个栈实现队列
栈先进后出,队列先进先出
假定一个StackIn,一个StackOut,入队列时将数据push到StackIn中,出队列时将StackIn中的数据pop出来然后插入到StackOut中再pop即可。
如入队列顺序为12345,插入至StackIn中为12345
出队列顺序为54321,StackIn数据pop插入到StackOut中为54321。

假定先入队列123,出队列1,再入45
StackIn插入123,StackIn出栈321,StackOut入栈321,StackOut再出栈2即可

总结:
push操作调用StackIn的入栈操作即可;
pop即将StackIn的数据全部出栈然后插入到StackOut中再pop,再将StackOut中数据以同样方式插入回StackIn中即可;
peek将StackIn的数据全部出栈然后插入到StackOut中再调用top,再将StackOut中数据以同样方式插入回StackIn中即可;
empty需要判断StackIn和StackOut同时为空即可。

题解:大体上差不多
peek有优化:调用自己实现的top找到这个数用res保存下来,再把res插入回去,然后返回res。

225. 用队列实现栈 - 力扣(LeetCode)
看题解前:跟上述思路差不多了
push:插入到q1队列
pop:把q1队列数据除了最后一个元素全部弹出然后插入到q2保存,获取到最后一个元素再把q2元素放回q1即可
top:直接返回q1的back(队尾)
empty:因为每次都把q2清空了的,所以只判断q1是否为空队列即可。

看题解后:忘记了C++运算符重载了=,可以直接q1=q2不用一个一个弹出。其他的基本相同。

20. 有效的括号 - 力扣(LeetCode)
看题解前:比较简单吧,用一个栈只放右括号,遍历s,遇到左括号就往栈里插入一个对应的右括号,比如‘(’就插入’)‘等,遇到右括号就判断跟栈顶那个是否相等,不等就是出错了返回即可。遍历完后查看栈是否为空,不为空说明左括号多了不匹配返回false,反之返回true。需要注意的是在取栈顶元素的时候要优先判断栈是否为空,空栈是无法取栈顶元素的。
看题解后:考虑到了s的长度如果是奇数则一定不匹配直接返回false,其他的思路以及实现差不多。

1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)
看题解前:比较简单,遍历s并保存字符到栈,如果当前字符和栈顶字符元素相同就栈弹出,不同就插入即可;再用一个string对象去取栈中的元素出来即可,最后记得逆置。![[Pasted image 20221019171335.png]]

看题解后:直接拿字符串作为栈,省去了栈以及字符串的操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值