代码随想录,栈和队列

1.队列是先进先出,栈是先进后出,栈有栈顶和栈底

2.c++使用的版本为GI STL(标准库),栈和队列是stl中的数据结构

通过栈实现队列,由于栈只能先进后出(倒序),不能实现队列的先入先出,因此增加一个栈,使其输出顺序为正。

        首先是入栈,直接将输入的值插入stIn栈中,当需要出栈时,将stin栈的值转到stout,此时需要判断stout是否为空,不为空则可以直接输出;为空则将stin的值导入,由于需要将stin的所有数值都放到stout,此时还需判断stin是否为空(作为条件)。(不用判断stin是否为空,默认不发生这种情况,stin为空,stout也比为空)

通过队列实现栈,可以新建两个队列q1q2,其中q2队列用来暂存数据,将q1队列的前n-1个元素放到q2,则q1的front即为栈顶,pop同上,push通过暂存,以及将q2不断清空得到出栈的顺序,top则直接调用q1.back()取队列的最后的值

有效的括号,题目是判断括号是否左右闭合,通过遍历左边元素,推出右边应为什么元素,再判断是否相符,类似栈的先入后出思想。了解新建栈stack <char> st,了解入栈出栈,st.push(),st.pop(),通过st.top()判断栈顶元素。

题目整体思路比较简单,通过栈来存储对应的括号,与字符串做对比,考虑几种不匹配的情况,字符串个数为单数;栈出栈完成后仍未遍历完字符串;遍历完成,栈还有元素;以及栈元素与字符串元素不同。

删除字符串相邻相同元素

新建栈,思考的怎么消除两个元素,通过将一个元素放到栈,遍历过去后如果相同则出栈,不同则将元素入栈,若栈中无元素,也入栈。因此if判断st.empty() || s[i] != st.top(),条件满足则入栈st.push(),否则出栈st.pop(),同时本次循环结束,删除了两个元素。然后将栈的元素放到result,但顺序是反的,通过reverse反转。

栈是容器适配器,为容器提供了一个特定的接口,通过不同的容器实现栈,默认采用deque(双端队列,两端插/删)使用vector则内存连续,链表list(频繁增/删)三种容器时数据结构。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值