两个栈实现一个队列以及两个队列实现一个栈(Java)
两个栈实现一个队列
import java.util.Stack;public class Demo07 {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){/*int data = stack1.peek();//查看栈顶元素,但不移除它stack1.pop();//弹出栈顶元素stack2.push(data);//压入*/ stack2.push(stack1.pop());}}if(stack2.isEmpty()){try {throw new Exception("queue is empty.");} catch (Exception e) {}}/*** int head = stack2.peek();* stack2.pop();*/int head = stack2.pop();return head;}
}
两个队列实现一个栈
import java.util.ArrayDeque;
import java.util.Queue;public class Demo08 {Queue<Integer> queue1 = new ArrayDeque<>();Queue<Integer> queue2 = new ArrayDeque<>();public void push(int node) {//两个栈都为空时,优先考虑queue1if (queue1.isEmpty()&&queue2.isEmpty()) {queue1.add(node);return;}//如果queue1为空,queue2有元素,直接放入queue2if (queue1.isEmpty()) {queue2.add(node);return;}if (queue2.isEmpty()) {queue1.add(node);return;}}public int pop() {//两个栈都为空时,没有元素可以弹出if (queue1.isEmpty()&&queue2.isEmpty()) {try {throw new Exception("stack is empty");} catch (Exception e) {}}//如果queue1为空,queue2有元素, 将queue2的元素依次放入queue1中,直到最后一个元素,我们弹出。if (queue1.isEmpty()) {while (queue2.size()>1) {queue1.add(queue2.poll());}return queue2.poll();}if (queue2.isEmpty()) {while (queue1.size()>1) {queue2.add(queue1.poll());}return queue1.poll();}return (Integer) null;}public static void main(String[] args) {Demo08 demo08 = new Demo08();demo08.push(1);demo08.push(2);demo08.push(3);demo08.push(4);System.out.println(demo08.pop());System.out.println(demo08.pop());demo08.push(5);System.out.println(demo08.pop());System.out.println(demo08.pop());System.out.println(demo08.pop());}
}
两个栈实现一个队列以及两个队列实现一个栈(Java)相关推荐
- 两个栈实现一个队列,两个队列实现一个栈
题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...
- 两个栈实现一个队列与两个队列实现一个栈
http://blog.csdn.net/z84616995z/article/details/19204529 两个栈实现一个队列: 原理方法:用一个栈为主栈,一个栈为辅助栈存放临时元素. 入队:将 ...
- 栈与队列2——两个栈组成队列
题目 编写一个类,用两个栈实现一个队列,并实现队列的基本操作(add,poll,peek) 思路 一个栈stackPush作为正常压入的栈,一个栈stackPop作为弹出的栈,将stackPush中的 ...
- 两个栈实现队列与两个队列实现栈
1. 两个栈实现队列 实现一 思路 s1是入栈的,s2是出栈的. 入队列,直接压到s1是就行了 出队列,先把s1中的元素全部出栈压入到s2中,弹出s2中的栈顶元素:再把s2的所有元素全部压回s1中 实 ...
- C#数据结构:两栈实现队列,两队列实现栈
两个栈实现队列:栈实现先进先出 栈1负责队尾,栈2负责队头 每次入队,栈2无元素且栈1无元素,入栈2:否则入栈1 每次出队,栈2有元素,出栈2顶:否则把全部栈1入栈2,再出栈2顶 bool Pop(r ...
- 两顺序栈共享Java_数据结构与算法(三),栈与队列
上一篇<数据结构与算法(二),线性表>中介绍了数据结构中线性表的两种不同实现--顺序表与链表.这一篇主要介绍线性表中比较特殊的两种数据结构--栈与队列.首先必须明确一点,栈和队列都是线性表 ...
- 一个数组实现两个栈(共享栈)
题目: 一个数组实现两个栈. 方法1: 下标为0的位置为栈1的栈底,下标为1的位置为栈2的栈底,栈1的元素存放在下标为偶数的位置上,栈2的元素放在下标为奇数的位置上. 如上图所示的数组:若 ...
- 算法与数据结构题目的 PHP 实现:栈和队列 由两个栈组成的队列
思路:同样使用 PHP 的数组模拟栈.栈的特点是先进后出,队列的特点是先进先出,可以用第一个栈(StackPush)作为压入栈,压入数据的时候只往这个栈中压入数据,第二个栈作(StackPop)为弹出 ...
- 栈顶指针和队尾指针指向当前位置和指向下一个位置的区别?——轻松搞懂栈和队列指针的指向问题
我们先看一下队列的队尾指针指向队尾元素的当前位置的入队操作: 可以看到,当队尾指针指向的是队尾元素时,我想加入一个新的元素,这时直接放在队尾指向的位置是不可以的,因为这个位置已经有元素了,所以先要对队 ...
- 【学校实验】停车场问题:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
停车场问题 问题描述 测试数据 基本要求 实现提示 代码实现 栈的实现 队列的实现 主函数的实现 问题描述 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆 ...
最新文章
- mac如何修改php.ini,mac 如何修改php.ini
- 网络设备中的交换机(Switch)是什么?—Vecloud微云
- dpi重启后会恢复_Linux 系统的备份恢复
- 干货回顾 | 泛娱乐社交 APP 出海的破与立
- VMware 提示”此虚拟机被配置为64位操作系统,然而,64位操作无法进行”
- JavaScript 和 Java 有关系吗?
- 第三方依赖关系的风险:利用数十个易受攻击的 NuGet包瞄准 .NET 平台
- SSH中常见jar包缺少错误
- 翻译:道路机动车辆驾驶自动化系统相关术语的分类和定义 J3016_202104
- 【数学建模】模糊综合评价模型
- vs2017 visual studio2017 密钥 激活码
- 软考中级软件设计师--6.UML
- rs232转485通信在串口助手只能发送数据而接受不到数据,求大神解答
- 唐宋边塞诗词中的古灵州
- iOS证书(p12)获取解密公私钥
- arnold ass standin 代理模型批量查询 与替换工具发布1.0
- 开源切片工具--TileStache
- 了解Panda3D引擎的配置变量
- 有道翻译 爬虫,分析反爬 附代码
- 关于builder模式的使用