问题:如何用两个堆栈模拟实现一个队列? 如果这两个堆栈的容量分别是m和n(m>n),你的方法能保证的队列容量是多少?
如何模拟?
首先栈是先进后出,队列是先进先出,因此二者的差别主要在于进出的顺序。
假设有栈A(n)、B(m),当把n个数据全部放入栈A,此时A栈顶是n,栈底是1。再将A内的数据出栈存入栈B,此时栈B栈顶是1,栈底是n,再pop栈B则满足先入先出的原则。
这个队列最大容量是多少?
先在A存入n个数据,此时A栈顶是n,栈底是1。再在B中存入第n+1个数据。A出栈,B入栈,此时B栈底是n+1,栈顶是1。A再存入n个数据,栈顶是2n+1,栈底是n+2。综上所述,最大容量是2n+1个数据。(若m=n则最大容量是2n)
需要注意什么
1.将A中的数据push进B中的数据时,B中不能原本就有数据,不然会乱序
2.A中的数据必须全部push进B中,不然会乱序
3.B的容量必须大于等于A的容量