用两个栈模拟一个队列,栈的容量分别是O和P(O>P),讨论队列可以实现的最大容量

思路分析:

        栈,先进后出;队列,先进先出;用一个栈存储先进来的数据,然后将这个栈全部POP(出栈)到第二个栈中,此时第二个栈的顺序便是理想的出栈顺序。简单来说就是一个栈用来做输入,一个栈用来做输出。如下图:

        

下面进行可以实现的最大容量讨论:

        假设栈1(s1)的容量为O,栈2(s2)的容量为P,并且(O>P),用s1来做存储栈,s2来做输出栈;那么首先s1中push(入栈)p个元素,然后s1全都POP(出栈),push进s2(此时s2满);然后入队操作,因为O>P,所以O起码>=P+1,此时s1最多再pop进p+1个元素,s2中的p个元素全都POP后,再将s1中的p个元素push进s2,要注意的是,此时出队的话,为了保证队的先进先出原则,必须是s1中的第p+1元素POP,然后才是s2中的元素依次POP,这样就实现了最大的队列容量。

注意点:在整个出队的过程中为了实现最大容量,不仅仅只有s2在输出,在必要的时候(即第p+1元素),s1也要直接输出,但是必须明白的是,s1最多只能直接输出一个元素(即s1中最多存储P+1个元素),多出两个往上都会违反队列的先进先出原则。可以自己试一试如果s1存储了p+2个元素,出队的时候会发生什么。(第P+2元素会比p+1元素先输出)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值