两个栈实现队列(完整理解)

自己总结了两个栈实现队列的三种方法:

方法1:

入队时候:将元素压入栈s1.

出队时候:将s1的所有元素逐个(出栈并入栈到)s2中;将s1的栈顶元素弹出作为出队列元素。

之后再将s2的所有元素(出栈并入栈)到s1.

   


实用范围:一次出队列,一次入队列,交替出现的情况。

优化:将s1的元素(出栈并入栈到)s2中,s1的栈底元素不用入栈到深,直接作为出队元素。



方法2:

入队时候:先判断s1是否为空,如不为空,直接入栈,如果为空,将s2的所有元素(出栈并入栈)到s1,再入队。

出队时候:先判断s2是否为空,如不为空,直接弹出s2的栈顶元素,如果为空,将s1的元素(出栈并入栈)s2,并将s1的栈底元素

出队列。


实用范围:多次出队列,多次入队列,没有规律。



方法3(最高效的方法):

入队时候:将元素直接压入s1;

出队时候:

先判断s2是否为空,如不为空,直接弹出s2的栈顶元素,如果为空,将s1的元素(出栈并入栈)s2,并将s1的栈底元素

出队列。


实用范围:所有情况。

第三种方法难以理解的地方:如果最初s1的元素为(1,2,3,栈底到栈顶的顺序,入队4,这个时候出队列,1出去。s1为空,再入队列,直接放在

s1中,这个时候s2没有空,再次出栈,直接出栈,直到s2空的时候,再倒入s1,。简化了很多步骤。(此处个人仔细理解,原因是栈的特点)。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值