题目描述

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

分析
   队列的特性是:“先入先出”,栈的特性是:“先入后出”

当我们向模拟的队列插入数 1,2,3 时,假设插入的是 stack1,此时的栈情况为:

栈 stack1:{1,2,3}

栈 stack2:{}

当需要弹出一个数,根据队列的"先进先出"原则,1 先进入,则 1应该先弹出。但是此时 1在 stack1 的最下面,将 stack1 中全部元素逐个弹出压入 stack2,现在可以正确的从 stack2 中弹出 1,此时的栈情况为:

栈 stack1:{}

栈 stack2:{3,2}

继续弹出一个数,2比 3 先进入"队列",2 弹出,注意此时 2在 stack2 的栈顶,可直接弹出,此时的栈情况为:

栈 stack1:{}

栈 stack2:{3}

此时向模拟队列插入一个数 4,还是插入 stack1,此时的栈情况为:

栈 stack1:{4}

栈 stack2:{3}

弹出一个数,3 比 4 先进入,3 弹出,注意此时 3 在 stack2 的栈顶,可直接弹出,此时的栈情况为:

栈 stack1:{4}

栈 stack2:{}

根据上述栗子可得出结论:

当插入时,直接插入 stack1.

当弹出时,当 stack2 不为空,弹出 stack2 栈顶元素,如果 stack2 为空,将 stack1 中的全部数逐个出栈入栈 stack2,再弹出 stack2 栈顶元素

import java.util.Stack;public class StackQueue {Stack<Integer> stack1 = new Stack<Integer>();Stack<Integer> stack2 = new Stack<Integer>();public void push(int node) {stack1.push(node);}public int pop() {if(stack2.size() <= 0){while(stack1.size() != 0){stack2.push(stack1.pop());}}return stack2.pop();}
}

常考数据结构与算法:用两个栈实现队列相关推荐

  1. 常考数据结构与算法:输出二叉树的右视图

    题目描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 上图树的右视图为:{1,4,3,7} 做此题之前可以先做下面3道题: 1. 常考数据结构与算法:求二叉树的层序遍历 2.常 ...

  2. 常考数据结构与算法:求二叉树的层序遍历

    题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...

  3. 数据结构和算法(03)---栈和队列(c++)

    文章目录 目录 一.栈 1.栈的基本操作 2.使用C++模板类实现栈 二.队列 1.队列的基本操作 2.循环队列 **循环队列顺序存储** **循环队列链式存储** 3.双端队列 目录 数据结构: 逻 ...

  4. 常考数据结构与算法:两个链表的第一个公共结点

    题目描述 输入两个链表,找出它们的第一个公共结点.(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 面试的时候碰到这道题,很多应聘者的第一反应就是蛮力法:在第 ...

  5. 常考数据结构与算法:设计getMin功能的栈

    题目描述 实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 示例1 输入 [[1,3],[1,2],[1,1],[3],[2],[3]] 返回值 [1,2] 备注: 有 ...

  6. 常考数据结构与算法:二叉树的之字形层序遍历

    题目描述 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树之字形层序遍历的结果是 [ ...

  7. Python数据结构与算法(二)栈和队列

    本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...

  8. 数据结构和算法(六)栈和队列

    前言 本章带大家聊一下栈和队列 方法 1.栈的概念 栈(stack),又称堆栈,它是运算受限的线性表.其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入.删除.查找等操作. 表中 ...

  9. 常考数据结构与算法:两个链表生成相加链表

    题目描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数. 给定两个这种链表,请生成代表两个整数相加值的结果链表. 例如:链表 1 为 9->3->7,链表 ...

最新文章

  1. Python设计模式-外观模式
  2. 三种活体检测方式分析
  3. 什么叫dfs文件服务器,什么是DFS(分布式文件系统)以及DFS的优点
  4. stm32的语音识别_基于stm32循迹避障语音控制金属探测蓝牙小车设计(原理图+pcb+源码+参考文档)...
  5. C#类、接口、虚方法和抽象方法
  6. Atitit 产品化法通则 目录 1. 何谓软件产品化? 1 2. 产品化优点 vs 项目化 2 2.1. 软件复用率提高 2 2.2. ,项目化交付 2 2.3. 维护成本高 2 3. 产品金字塔
  7. 关关采集器如何配置代理ip【图文教程】
  8. Diamond软件的使用(6)--Lattice原语基本概念
  9. LCD驱动芯片——BL55072A驱动程序
  10. 4、LED1602液晶模组介绍及其编程使用
  11. [阅读笔记]专访刘毅:阿里巴巴云计算平台运维故障分析与排查
  12. 2w 字长文带你搞懂 Linux 命令行
  13. python实现归结演绎推理_归结演绎推理.ppt
  14. 解决导入protobuf源代码Unity报错的问题
  15. Python二级(04)——Python语言基本语法元素
  16. 零基础python入门书籍推荐书目_清华大学出版社-图书详情-《Python数据科学零基础一本通》...
  17. mySQL下载后的初次使用
  18. 【Verilog基础】用与非门、或非门构成或门、与门、非门
  19. OllyDBG反汇编入门教程
  20. 鸿蒙OS应用开发基础之页面的跳转

热门文章

  1. top命令详析及排查问题使用演示
  2. wubantu18.04版,pycharm2.18.3.2永久破解来了,借鉴个位大神的教程破掉的,感谢各位大佬...
  3. 【转】HTTP Response Header 的 Content-Disposition
  4. 苹果iPhone被曝跟踪用户位置信息(图)
  5. JS 设计模式之初识(一)-单例模式
  6. 新加坡计划通过区块链促进东盟金融包容性
  7. 初入react -01
  8. Java SE 6之GUI:让界面更加绚丽(上)
  9. linux设备驱动归纳总结(四):1.进程管理的相关概念【转】
  10. apache用户名和密码验证