面试题:用两个栈实现一个队列 Java语言实现

分析

栈是先进后出,队列是先进先出,为了用两个栈实现一个队列的进和出方法,可以这样:
进:保存到栈一里面;底|1|2|3|
出:栈一中的元素依次出栈,并进入到栈二中 底|3|2|1|,然后再把栈二顶的元素推出,就
实现了队列的出功能;

Java代码实现

package cn.edu.ncu.java;import java.util.Stack;/** 栈是先进后出,队列是先进先出,为了用两个栈实现一个队列的进和出方法,可以这样:* 进:保存到栈一里面;底|1|2|3|* 出:栈一中的元素依次出栈,并进入到栈2中 底|3|2|1|,然后再把栈二顶的元素推出,就* 实现了队列的出功能;**/
//two stacks implement one queue
public class TestStackAndQueue {public static void main(String[] args) {MyQueue<Integer> myQueue = new MyQueue<>();//push into queuemyQueue.push(1);myQueue.push(2);myQueue.push(3);//test popSystem.out.println("队列出队的第" + "1" + "个是:" + myQueue.pop());System.out.println("队列出队的第" + "2" + "个是:" + myQueue.pop());System.out.println("队列出队的第" + "3" + "个是:" + myQueue.pop());}
}class MyQueue<ElementType> {public MyQueue() {}private Stack<ElementType> stack1 = new Stack<>();private Stack<ElementType> stack2 = new Stack<>();//push : push to the first stack;public void push(ElementType e) {stack1.push(e);}//pop: first pop all the elements to the 2nd stack, then pop from the 2nd stack;public ElementType pop() {//from stack1 to stack2while (!stack1.empty()) {stack2.push(stack1.pop());}//pop out from stack2return stack2.pop();}public boolean isEmpty() {return stack1.empty();}
}

运行结果

面试题:用两个栈实现一个队列 Java语言实现相关推荐

  1. 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)

    http://blog.csdn.net/hanjing_1995/article/details/51539578 使用两个栈实现一个队列 思路一: 我们设定s1是入栈的,s2是出栈的. 入队列,直 ...

  2. 记一道面试题:STL两个栈实现一个队列。

    面试题目 STL两个栈实现一个队列. 要求:只能使用栈的pop(),top()和push(),以及测试栈是否为空 empty()四个操作. 来实现队列的clear(), push(),pop(),ba ...

  3. 算法图解:如何用两个栈实现一个队列?

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 本文已收录至 https://github.com/vipstone/algori ...

  4. 包含min函数的栈和两个栈实现一个队列

    题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). 分析:这是google的一道面试题. 看到这道题目时,第一反应就是每 ...

  5. java 栈和队列实现迷宫代码_算法图解:如何用两个栈实现一个队列?

    本文已收录至 https://github.com/vipstone/algorithm <算法图解>系列. 队列和栈是计算机中两个非常重要的数据结构,经过前面的学习(<队列> ...

  6. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...

    多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...

  7. 【剑指offer】用两个栈实现一个队列

    题目:两个栈实现一个队列. 栈的特点:先进后出,队列的特点是先进先出 思路:stack1放入数据:pop时,先判断stack2是否为空,如果不为空,直接pop,如果空,则push(stack1.pop ...

  8. 剑指offer五:两个栈实现一个队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. package com.jianzhioffer;import java.util.Stack;publ ...

  9. 两个栈实现一个队列,两个队列实现一个栈

    题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...

  10. python 用两个栈实现一个队列

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

最新文章

  1. 教你搞定Android自定义View
  2. 合并要素--how to use ConstructUnion
  3. hibernate管理实体的三个状态
  4. 运行QQ出现initialization failure 0x0000000c错误和浏览器上不了网
  5. java dictionary遍历_遍历 Dictionary,你会几种方式?
  6. Gym - 100989J -(DFS)
  7. arduino COM口被占用问题解决
  8. IE自动弹出窗口(JS/TrojanDownloader.Iframe.NDR 木马查杀)故障解决
  9. React UI 库 React Suite 3.7.9 版本更新
  10. 详解:IDEA不能自动加载import问题
  11. 向量函数具有固定模的充要条件
  12. Process Explorer简易图文教程(下)
  13. 可靠性标准: TL9000
  14. 解决xShell4某些情况下按删除键会输出^H的问题
  15. iOS 增强现实教程:基于位置定位
  16. (Research)泛癌单细胞分析揭示肿瘤微环境中癌相关成纤维细胞的异质性和可塑性
  17. Set 接口实现类-HashSet
  18. 腾讯云图地图使用介绍
  19. CSRF 的攻击过程
  20. 空教室php,空教室空教室里,上了特殊的“最后一课”里,上了特殊的“最后一课”...

热门文章

  1. 嵌入式C语言(指针)
  2. 屏幕录像专家录制的内容中有“未注册”字样怎么办
  3. 【SAM】bzoj5084: hashit
  4. C51单片机串口初始化为何是这样:SCON=0X52;TMOD=0X20;TH1=0XF3;TR1=1;
  5. 如何将卫星影像按固定比例尺输出(1:5千,1:1万等)
  6. swift code银行代码怎么查询呢?
  7. Codeblocks 17汉化
  8. Matlab:Matlab 软件学习之GUI图像用户界面简介(工具栏/菜单栏/对话框)、GUI界面设计案例应用(设计二级菜单栏)之详细攻略
  9. Project(10)——收货地址 - 设置默认
  10. 使用Kali Linux Metasploit 复现 word宏