两个栈实现队列——优化版

Posted arax

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个栈实现队列——优化版相关的知识,希望对你有一定的参考价值。

这个是一个很常见的算法,在剑指offer中有详细的讲解,在这里提供一种优化的实现。该实现的优点是不需要每次在数据出列时,将数据copy到另一个堆栈中。并写了其对应的单元测试

主要思想

主要实现是在类中定义了两个全局变量,标明当前队列中两个栈的状态,

  • isMain 表示现在数据存储在哪个栈中。
  • inOrder 表示现在最早加入队列的元素是否在栈顶。

在向对列中添加顺序时,如果inOrder = false 则可以直接添加,否则就要将数据导到另一个栈中,然后将数据添加到有数据的栈中。在从队列中移除数据时,如果inOrder=true 则存储数据的栈直接将数据弹出即可,否则将数据导入到另一个栈再将数据弹出。

优点

  • 在连续从队列中移除数据时,不需要频繁的将数据在两个栈之间导来导去。

PS:代码在超链接中。

以上是关于两个栈实现队列——优化版的主要内容,如果未能解决你的问题,请参考以下文章

leetcode剑指 Offer 09. 用两个栈实现队列

剑指offer(PHP版改写)---两个栈实现队列

剑指 Offer 09. 用两个栈实现队列

两个队列实现一个栈 + 两个栈实现一个队列

用两个队列实现一个栈and用两个栈实现一个队列

javajava两个栈实现一个队列&两个队列实现一个栈