描述

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例

输入:
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[3],[],[]]
输出:
[null,null,3,-1]

输入:
[“CQueue”,“deleteHead”,“appendTail”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[],[5],[2],[],[]]
输出:
[null,-1,null,null,5,2]

思路

栈是先入后出,而队列是先入先出,显然出栈顺序和出队顺序是相反的。
那么,可以用两个栈 A,B,只从 A 中放入新的元素,只从 B 中获取元素。当 A 中放入若干个元素后,需要获取一个元素时,此时 B 为空,那么就将 A 中的所有元素按出栈顺序加入 B 中,再从 B 中弹出栈顶元素,此时获取的元素就是按 FIFO 顺序的。再次获取元素时,B 不为空,则直接获取即可。

代码

class CQueue {private Stack<Integer> stack1 = null;private Stack<Integer> stack2 = null;public CQueue() {stack1 = new Stack<>();stack2 = new Stack<>();}public void appendTail(int value) {stack1.push(value);}public int deleteHead(){if (stack2.isEmpty()) {if (stack1.isEmpty()) return -1;while (!stack1.isEmpty()) {stack2.push(stack1.pop());}}return stack2.pop();}
}

9. 用两个栈实现队列相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  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类型.  * 解决方案:方法一:一个作为存储用,一个作为弹出用  * * ...

  10. java 栈和队列实现迷宫代码_LeetCode每日一题--剑指 Offer 09. 用两个栈实现队列(Java)

    DailyChallenge 剑指 Offer 09. 用两个栈实现队列 Easy20200630 Description 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTai ...

最新文章

  1. Tensorflow yolov3 Intel Realsense D435 双摄像头下测试python多线程(假的多线程)self.predict()函数运行时间(191204)
  2. Linux开启服务器问题(李蕾问题)
  3. 使用 Commander 写自己的 Nodejs 命令
  4. jq ajax购物车,jquery制作的移动端购物车效果完整示例
  5. c语言从入门到秃头表情包,c语言从入门到放弃表情包 - c语言从入门到放弃微信表情包 - c语言从入门到放弃QQ表情包 - 发表情 fabiaoqing.com...
  6. bsod错误代码。_如何解决BSOD(蓝屏死机)和Windows Stop错误?
  7. 使用SQL管理数据库
  8. 【web-攻击验证机制】(3.2.3)验证机制设计缺陷:“记住密码” 功能、用户伪装功能、证书确认不完善
  9. Android Studio gradle 统一版本管理
  10. 【转】Unity5 新AssetBundle打包方式 BuildPipeline.BuildAssetBundles
  11. Android apk安装过程
  12. linux-逻辑卷管理
  13. 【算力网络】算力网络的技术创新——绿色与安全关键技术
  14. 中国互联网的巨头们,为何敢“大数据杀熟”?
  15. 抓狐狸小游戏(python程序设计实验16)
  16. 黎明杀机手游注册登陆详解
  17. 记录总结-如何逮捕实验室的老鼠
  18. java一年工作内容描述_java工程师工作内容描述
  19. Android软件权限知识普及
  20. 雷达 固件 调试_本周我们的雷达:Google,浏览器中的构建工具和调试

热门文章

  1. 矩阵与高斯消元【矩阵乘法,高斯消元求线性方程组,求行列式】 全网最详,附例题与姊妹篇 一万三千字详解
  2. python输入数字给数组_python如何用input输入数组
  3. Qt/C++编写安防视频监控系统20-录像机管理
  4. glup的安装与启动
  5. 《数据结构》课程设计-迷宫求解
  6. tsv文件转excel文件
  7. 电脑连不了wifi而手机可以的解决办法
  8. gogs git代码管理
  9. MyBatis查询结果resultType返回值类型
  10. 人工智能减少肺癌筛查误报