用队列实现栈(Java)

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

实现 MyStack 类:

void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false .

采用双队列实现一个后入先出的栈结构

Queue<Integer> queue1;
Queue<Integer> queue2;
public MyStack() { // 类名
// 双队列queue1 = new LinkedList<Integer>();queue2 = new LinkedList<Integer>();
}

一个栈的基本操作有出栈跟入栈以及查看是否为空三种操作,出栈还分为删除栈顶元素的出栈跟查看栈顶元素。因此可以分为push(int x)、pop()、top()、empty()四种操作函数

  • 在入栈的操作中,先进入队列2中,再将队列1中的数据循环存入到队列2中,最后将队列1和队列2的中数据进行对调即可完成入栈
public void push(int x){queue2.offer(x);  // 将新数据存入队列2中while(!queue1.isEmpty()){  // 判断队列中1是否为空,不为空则将数据存入队列2中queue2.offer(queue1.poll());  // 取出队列1中的元素存入队列2中}// 置换队列数据Queue<Integer> temp = queue1;  // temp缓存queue1 = queue2;queue2 = temp;
}
  • 在出栈操作中,分为两种,一种出栈即删除,另一种出栈不删除元素

    // 第一种,删除元素
    public int pop(){return queue1.poll();  // 调用Queue结构函数即可
    }// 第二种 不删除元素
    public int top(){return queue1.element();  // 同样调用函数即可
    }
    
  • 最后一种 判断栈是否为空,也是调用函数即可

    public boolean empty(){if(queue1.isEmpty()){  // 判断队列1是否为空,因为队列1是主队列,只需判断队列1即可return true;}return false;
    }
    

至此,栈的问题就可以解决了,该类问题可能不怎么常见,因为一般编程语言都会自带队列和栈的数据结构,无需我们再去实现栈变队列会这是队列变栈的问题。但这类问题可以让我们去思考如何通过其他数据结构去实现某一种结构的方法,也算是锻炼了我们对数据结构的熟练程度吧

*** 来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/implement-stack-using-queues
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。***

用队列实现栈(Java)相关推荐

  1. 两个栈实现队列+两个队列实现栈----java

    2019独角兽企业重金招聘Python工程师标准>>> 一.两个栈实现一个队列 思路:所有元素进stack1,然后全部出stack1并进入stack2.实现队列的先进先出即:若sta ...

  2. Leetcode刷题 225题:用队列实现栈(基于Java和c++两种语言)

    ** Leetcode刷题 225题:用队列实现栈(基于Java和c++两种语言) ** 题目: 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top( ...

  3. java使用队列实现栈思路_算法面试:队列实现栈的方案

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇介绍的是如何用两个队列实现栈的问题.这道题作为上一篇文章算法面试:栈实现队列 ...

  4. java用队列实现栈、用栈实现对队列

    目录 用队列实现栈 用栈实现对队列 LeetCode题 225. 用队列实现栈 232. 用栈实现队列 用队列实现栈 思路: 1.创建两个队列, 2.哪个队列不为空就将要push的元素放到该队列中,若 ...

  5. 栈和队列(超详细Java实现)

    栈和队列 一.栈(Stack) 1.概念 2.栈的使用 3.模拟实现一个栈 1. 构造方法 2. 入栈(push) 3. 出栈(pop) 4.获取栈顶元素(peek) 5.获取元素个数(getSize ...

  6. Leetcode--225. 用队列实现栈(Java)

    使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作 ...

  7. 【LeetCode笔记】225. 用队列实现栈(Java、队列、栈)

    题目描述 感觉栈实现队列更简单,不过这个也还好 写法有点像 JVM GC 里的复制算法 思路 & 代码 两个队列实现栈:from.to from:实际上的栈,存储元素就是按照栈的顺序来,负责p ...

  8. 代码随想录第十天 | 225. 用队列实现栈 232.用栈实现队列(Java))

    232.用栈实现队列 class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackOut;public MyQueue( ...

  9. 11.3-全栈Java笔记:线程的生命周期

    一个线程对象在它的生命周期内,需要经历5个状态. 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态 ...

最新文章

  1. 使用jsonp跨域请求后可以获得数据,但是进入error方法,返回parseerror
  2. vty 虚拟终端连接 line vty 0 4 和line vty 5 15 区别
  3. 一个简单的DELPHI自定义事件的例子(转)
  4. 《流浪地球》虽好,却存在一个不可回避的硬伤!
  5. Unity学习笔记3 简易2D横版RPG游戏制作(三)
  6. Is this a MS EnterLib DAAB BUG or not?
  7. 关于序列建模,是时候抛弃RNN和LSTM了
  8. NHibernate.3.0.Cookbook第三章第9节的翻译
  9. php 实现贪吃蛇游戏,C++实现简单贪吃蛇游戏
  10. php7 cms,PHP7CMS 无条件前台GETSHELL
  11. Visual C#设计多功能关机程序
  12. 单细胞转录组基本概念(一)
  13. ucenter 显示通信成功的条件
  14. hbuilder设置html浏览器打开,HBuilder X如何配置浏览器操作配置方法
  15. 前端必须懂的计算机网络知识—(XSS、CSRF和HTTPS)
  16. 《初级会计电算化应用教程(金蝶KIS专业版)》——1.5 习题
  17. js中的点击事件(click)的实现方式
  18. ffplay flv mp4 转_FLV与MP4格式视频转换
  19. 【神经网络】变分自编码大杂烩
  20. [续]基于高斯两步移动搜寻法(2SFCA)的城市绿地可达性分析[格网]

热门文章

  1. ThinkPHP+宝塔运营环境实现定时任务
  2. 高校图书馆环境监控系统解决方案
  3. 孙振耀退休感言(二)
  4. 从开发者的角度比较Kubernetes和Cloud Foundry
  5. 利用计算机教学的体会,利用多媒体教学设备心得体会
  6. 什么是静态网站?什么是动态网站?
  7. Docker安装JIR
  8. 什么是Google PR值? 如何提高PR值?
  9. 20194711 阚宇航 第一次软工作业
  10. 织梦(DEDECMS)系统网站搬家技巧-dedeCms换空间搬家教