第五章:栈与队列

1:基础概念: 

        栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。 不像是set 或者map 提供迭代器iterator来遍历所有元素。

        所以STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)。

        我们常用的SGI STL,如果没有指定底层实现的话,默认是以deque为缺省情况下栈的底层结构。deque是一个双向队列,只要封住一段,只开通另一端就可以实现栈的逻辑了。

        缺省的意思是只要不指定特定数据结构,那就是队列指定生成栈。

(T232)用栈实现队列 

首先了解队列有四种用法:

入队,出队,返回对头元素,删除队头元素。

对于入队:就是将元素插入队尾,也就相当于将元素直接插入到栈底,

从队列开头移除并返回元素:由于队列是先入先出,所以按照这个逻辑,对于栈也必须是先入先出,但是一个栈是先入后出的,所以需要使用两个栈,将其中一个栈的栈顶元素插入另一个元素的栈底,这样的话,栈底元素自然而然的成为栈顶元素,同样,满足条件就是当出栈为空的时候,就一股脑的将入栈元素全部插入栈元素,最后定义一个输出result.并且指向出栈的栈顶,将栈顶元素弹出之后,接收元素,随后返回。

返回队列开头元素,归根结底就是将出栈弹出的元素再次加入到出栈元素中,然后返回就行,判断队列是否为空,只需要考虑入栈,出栈是否为空即可。

(T225)用队列实现栈

同理,按照上述方法,实现用队列实现栈的解法,定义两个队列,

对于第一个要求:将元素x压入栈顶,就是将元素压入到队列1中

第二个要求:移除并返回栈顶元素:

(T1047)删除字符串中的所有相邻重复项

定义一个栈,一个字符串,类似消消乐一样,只要字符串中的数字不等于栈顶元素,那么就压栈,反之等于栈顶元素,那么就将栈顶元素删除,结束之后,再将所有元素直接加入到result之中,最后reverse反转。

(T150) 逆波兰表达式求值

循环遍历字符串中的所有的元素,依次入栈,但凡遇到加减乘除,便可依次进行运算,运算结束之后再反转一下字符串即可,最后,返回result。注意:stoi函数是将字符串中的数字转换为十进制数入栈后进行运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值