使用两个栈实现一个队列

实现1

s1:用于入栈;
s2:出栈时用于辅助;

入队列:直接压入s1中;
出队列:将s1的元素倒入s2中,s2弹出栈顶元素,再把元素倒回s1中;

这里写图片描述

实现2

s1:用于入栈;
s2:用于出栈。
所有元素都在同一个栈里面。

入队列:如果s1为空,把s2中所有的元素倒到s1中,再把元素压入s1;否则直接压入s1;
出队列:如果s2为空,把s1的所有元素全部倒到s2中,再弹出s2的栈顶元素;否则,直接把s2中的栈顶元素弹出;

与实现一相比,实现一把来回倒的操作都放在了出队列中,而实现二把它分摊到入队列和出队列中;

实现三

s1:用于入栈;
s2:用于出栈。

入队列:直接将元素压入s1;
出队列:如果s2不为空,把s2中的栈顶元素直接弹出;否则,把s1的所有元素全部倒到s2中,再弹出s2的栈顶元素;

举个例子:

s1:1 2 3 4 5
s2:

pop()
s1:
s2: 5 4 3 2

push(6)
s1: 6
s2: 5 4 3 2

pop()
s1: 6
s2: 5 4 3

很明显,只有在s2被倒空了,s1才会再往s2中倒元素,这样子就不用来回倒,节省了很多时间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值