JAVA 两个队列实现栈
[JAVA]两个队列实现栈
思路
首先,我们明白队列和栈的区别:队列是先进先出,栈是先进后出。所以我们可以发现,在代码逻辑上实现栈和队列的思想是相同的,只是实现的方式不同。所以用两个队列实现栈可以看作两个先进先出的链表实现的功能是一个先进后出的链表。
由此可知,两个队列中一定有一个队列元素的出队顺序是和出栈顺序相同的,所以我们可以用一个队列来实现栈的出栈操作,另一个队列来实现栈的入栈操作。因为队列是队尾入队头出,所以我们只要在一个空队列中先将待插入元素入队,再将现有元素入队,就可以实现与栈一样的效果。
具体图解
插入数字1到空队列A
插入数字2到队列B,再将队列A中元素依次出队,插入队列B
插入数字3到队列A,再将队列B中元素依次出队,插入队列A
源代码
import java.io.IOException;
import java.util.*;
/**
两个队列形成栈*/class Solution1{//初始化创建两个队列Queue<Integer> A,B;public Solution1() {A = new LinkedList<>();B = new LinkedList<>();}public void push(int x) {//保证一个队列为空,插入空队列再将另一个队列中数据插入此队列if(!A.isEmpty() && B.isEmpty()){B.add(x);while(!A.isEmpty()){B.add(A.poll());}}if(A.isEmpty() && B.isEmpty()){A.add(x);}}public int pop() {//出栈,即将存有数据的非空队列输出一个数据if(!A.isEmpty()){return A.poll();}return B.poll();}public int top() {//获取栈顶元素,即获取存有数据的队列的队首数据且不删除if(!A.isEmpty()){return A.peek();}return B.peek();}public boolean empty() {//查看栈是否为空if(A.isEmpty() && B.isEmpty()){return true;}return false;}public static void main(String[] args){//主函数Solution1 stack = new Solution1();stack.push(1);stack.push(2);System.out.println(stack.top());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.empty());}
}
JAVA 两个队列实现栈相关推荐
- 20190805:两个队列实现栈
两个队列实现栈的java实现 两个队列实现栈 大致思路 代码实现 两个队列实现栈 力扣简单习题: 大致思路 代码实现 package com.immunize.leetcode.implementQu ...
- 剑指offer之两个队列实现栈的问题
1 问题 两个队列实现栈的插入和获取头部元素的功能 2 分析 1)获取头部元素的功能分析: 我们有2个队列,我们知道队列的特点的先进先出,而栈的特点是先进后出,比如我们有数据1,2,3,4,我们分别依 ...
- 两个栈实现队列与两个队列实现栈
1. 两个栈实现队列 实现一 思路 s1是入栈的,s2是出栈的. 入队列,直接压到s1是就行了 出队列,先把s1中的元素全部出栈压入到s2中,弹出s2中的栈顶元素:再把s2的所有元素全部压回s1中 实 ...
- 【使用两个队列实现栈】
文章目录 前言 使用两个队列实现栈 1.队列接口函数引入 2.栈的初始化 3.向栈中插入元素 4.出栈操作 5.取出栈顶元素 6.判断栈是否为空 7.释放内存空间 总结 前言 本文章主要介绍栈和队列的 ...
- 用两个队列实现栈——C语言实现
如何用两个队列实现栈? 思路分析:建立队列q1,在第队列中入队元素1,2,3,4. 我们知道,队列是先进先出的,如果出队的话,得到的元素是1,而不是4.而按照栈的要求,出栈的元素应该是4. 那么怎样得 ...
- 两个栈实现队列+两个队列实现栈----java
2019独角兽企业重金招聘Python工程师标准>>> 一.两个栈实现一个队列 思路:所有元素进stack1,然后全部出stack1并进入stack2.实现队列的先进先出即:若sta ...
- 脱裤子放屁之用两个栈实现队列、用两个队列实现栈
牛客网上有一道很nt的题目,用两个栈实现队列,你直接用队列不好吗?还耗内存,真的是脱裤子放屁,但是骂归骂,题目还是要做的. 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为in ...
- 【两个队列模拟栈】——栈与队列
题目 用两个队列模拟实现栈的操作原题链接 思路 我是用两个list模拟的,没有用java的queue,下次用queue. 思想就是:元素进入一个list1,当list1中元素多余1个时,将list1的 ...
- Python:两个队列实现栈,两个栈实现队列
1.两个栈实现一个队列 有三种思路: 思路一:将stack1作为存储空间,将stack2作为临时缓冲区,入队时,直接压入stac1,出队时,将stack1中的元素依次出栈压入stack2中,再将sta ...
- C++用两个队列实现栈
1. 基础 队列:先进先出,即插入数据在队尾进行,删除数据在队头进行: 栈:后进先出,即插入与删除数据均在栈顶进行. 2. 思路 两个队列实现一个栈的思想:用dataQueue队列作为push数据的队 ...
最新文章
- mysql linux centos 安装_Linux centos 下在线安装mysql
- LeetCode算法题8:递归和回溯1
- 使用npm安装TypeScript
- SpringBoot2.0基础案例分类总结,后续更新计划说明
- U盘安装Ubuntu14.04 server版 提示无法挂载cd-rom数据的解决办法
- 你我的父母,都在被互联网“割韭菜”
- Android基于高德地图poi的仿微信获取位置
- Nginx基础篇-Nginx的编译参数
- ERROR 2002 (HY000): Cant connect to local MySQL server through socket的解决方法
- input输入框 去掉外边框 解决方案
- 对数字化转型的部分认知(一)
- 小米电视显示服务器故障,小米电视常见的三大问题分析及解决方法
- 全球企业研发投入排行榜:苹果第七,华为第五,第一是?
- PS2019 cc for Mac语言切换
- 计算机窗口弹不出来桌面怎么弄,怎么在电脑中设置不再弹出程序的广告窗口
- 惠普服务器380作用,至强E5服务器介绍:惠普DL380p Gen8_惠普服务器_服务器评测与技术-中关村在线...
- linux磁盘自动挂载方式,Linux磁盘自动挂载及介绍
- h5酷炫粒子java代码_html5粒子效果文字特效
- 自己用计算机唱的歌,电脑唱歌录音软件 怎么在电脑上自己录歌
- PC端(win10)与机器人端(ubuntu)的远程连接