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


    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]]

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

  • 相关阅读:
    嵌入式Linux—FreeType矢量字体
    互联网摸鱼日报(2022-12-05)
    蓝桥杯备赛第四篇(高级数据结构)
    webpack详解
    基于flv.js的视频自动播放
    2023年中国研究生数学建模竞赛赛题浅析
    面试必学:输入 URL到页面的全过程-----五步完成、简单明了
    分布式爬虫
    ES6(ECMASript 6 新特性---Set,Map,class类)
    PG::Potato
  • 原文地址:https://blog.csdn.net/l50153/article/details/127412058