7.用两个栈实现队列
来源:互联网 发布:js声明一个json对象 编辑:程序博客网 时间:2024/05/17 03:43
栈和队列是两个相反的存储和相反的弹出顺序。
既然使用栈实现队列。就是将栈 1 的数据出栈并存储到另外一个栈2里面,那么两个栈的序列就是相反的。在栈2里面pop出来的数据就和正常的队列出队一样。
实现思想:
用栈 1 存储数据 ,栈2 用来临时存储数据,并实现出栈。
public void push(int node) { stack1.push(node); } public int pop() { while (!stack1.isEmpty()) { stack2.push(stack1.pop()); } int result = stack2.pop(); while (!stack2.isEmpty()) { stack1.push(stack2.pop()); } return result; }
当然还有更加方便的一个方法:
实现思想:
用栈1 栈2 都只存储一份数据。对于队列的push, 需要入栈的时候将数据压入栈 1 。对于队列的pop,当栈2为空时,需要将栈1的数据出栈并压入栈2 ,这样栈2 的出栈顺序就和正常的出队顺序一样,也就是说栈2 里的所有数据,都和压栈的顺序相同(先入先出),当stack2的数据都出栈完了,再从stack1里面出栈,然后压栈到stack2。如果一直出栈,直到stack1 和stack2都没有
数据了,那么就没有数据可以出栈了。
出栈的两种情况:
stack2为空 stack2不为空stack1 stack2 stack2 stack1 stack2 -> stack2 5 null 1 5 1 2 4 2 4 2 3 3 3 3 2 4 1 5 栈底 栈底
代码如下
import java.util.Stack;import java.util.EmptyStackException;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(node); } public int pop() { if(stack1.empty()&&stack2.empty()){//如果两个栈都没有数据就 } if(stack2.empty()){ while(!stack1.empty()){//stack2没有数据,则需要从stack1出栈数据到stack1. stack2.push(stack1.pop()); } } return stack2.pop();//无论如何都是从stack2 里面的到队列出队的值 }}
阅读全文
0 0
- 7. 用两个栈实现队列
- 7. 用两个队列实现栈
- 7.用两个栈实现队列
- 用两个栈实现队列 & 用两个队列实现栈
- 用两个队列实现栈&用两个栈实现队列
- 用两个栈实现队列 & 两个队列实现一个栈
- 两个栈实现队列&&用两个队列实现一个栈
- 用两个栈实现队列 & 两个队列实现栈
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个队列实现栈
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个队列实现栈
- 用两个栈实现队列
- 用两个队列实现栈
- 用两个栈实现队列
- 大数据(三十四)HBASE【调优】
- Android第一行代码-第二版内容大纲
- myeclipse快捷键
- mybatis动态sql中的trim标签的使用
- Valid Parentheses
- 7.用两个栈实现队列
- Rime输入法引擎配置( 小狼毫输入法常用设置)
- OSI 五层结构
- Hibernate的openSession()和 getCurrentSession()联系
- 学习OpenCV 第四章课后题第一题(合并图像、缩放、字体)
- 阿里巴巴Java规约插件实操
- 剑指Offer 面试题21:调整数组顺序使奇数位于偶数前面 Java代码实现
- Response对象的概述
- LeetCode Exercise 11: Spiral Matrix