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

主要思想

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

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

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

优点

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

PS:代码在超链接中。

两个栈实现队列——优化版相关推荐

  1. 剑指offer第二版-9.用两个栈实现队列

    描述:使用两个栈实现一个队列.队列中实现尾部插入和头部删除函数. 思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对s ...

  2. 剑指offer:面试题09. 用两个栈实现队列

    题目:用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有 ...

  3. 剑指offer_第5题_用两个栈实现队列

    题目描述 用两个栈来实现一个队列 完成队列的Push和Pop操作 队列中的元素为int类型 理解 关于栈 什么是栈 栈的抽象数据类型 Python实现栈 关于队列 什么是队列 队列抽象数据类型 Pyt ...

  4. 《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java

    <LeetCode力扣练习>剑指 Offer 09. 用两个栈实现队列 Java 一.资源 题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 de ...

  5. 剑指Offer #05 用两个栈实现队列(模拟)

    题目来源:牛客网-剑指Offer专题 题目地址:用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目解析 首先,我们需要知道一下基本知 ...

  6. 【干货】容器适配器实现两个栈模拟队列

    用两个栈模拟队列的思想就是"倒水思想",这里我们用自定义类型模拟出线性表,再用线性表做容器实现栈的数据结构,最后用栈来实现队列,代码如下: #include<iostream ...

  7. 《剑指offer》-- 构建乘积数组、求1+2+3+...+n、不用加减乘除做加法、包含min函数的栈、用两个栈实现队列

    一.构建乘积数组: 1.题目: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*. ...

  8. 《剑指offer》第九题(用两个栈实现队列)

    // 面试题:用两个栈实现队列 // 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail // 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的 ...

  9. 栈一:用两个栈实现队列

    /**  * 题目:用两个栈实现队列  * 描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.  * 解决方案:方法一:一个作为存储用,一个作为弹出用  * * ...

最新文章

  1. linux中if的作用域,【2017-02-21】分支语句if...else...、分支嵌套、变量的作用域
  2. android overridePendingTransition
  3. 局部线性嵌入(LLE)算法matlab可运行
  4. 【Linux】一步一步学Linux——sudo配置文件详解(106)
  5. python通过手机抓取微信公众号
  6. QT中生成字符串md5的方法
  7. 字节跳动在 Spark SQL 上的核心优化实践
  8. 如何使用bash / sed脚本删除文本文件的第一行?
  9. 49 字符大小写排序
  10. redis远程连接的几种方式
  11. JAVA生成UUID
  12. 机器人学导论,课后习题答案。
  13. 用WORD制表的一些技巧
  14. 【数据结构与算法】五、哈希表和链表
  15. 梅科尔工作室-梁嘉莹-鸿蒙笔记1
  16. L. Lifeguards(排序)
  17. 第一阶段:Linux基础
  18. 自动化测试框架-数据驱动(1)
  19. 贝尔机:带你领略编码的魅力
  20. Unreal:还你一个真实的“虚幻”

热门文章

  1. 打算去深圳中小学当老师了,一年也有30万!
  2. 读 GTD 时间管理法有感以及 tomato-pie 的一个新 feature
  3. JavaScript中改变鼠标指针样式的方法
  4. 客户端服务器信息交互,select实现客户端和服务器端的信息交互(TCP socket)
  5. HTML实现动态日历
  6. 在win7上安装虚拟机及连接管理虚拟机客户端步骤
  7. 互联网创业项目推荐,这5个项目不容错过!
  8. ACE_Acceptor类源码浅解析
  9. HTTP post请求content-type设置
  10. 欢迎来到小蜗牛的博客