用两个栈实现队列
来源:互联网 发布:什么是云计算 通俗 编辑:程序博客网 时间:2024/06/05 01:18
用两个栈实现队列
1. 题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
考察内容:队列,栈
2. 解题思路
- 栈是一种后进先出的数据结构
- 队列是一种先进先出的数据结构
- 当一个元素位于队列的front和栈的top时,会被率先退出数据结构
- 一个元素会率先被存储在栈的top和队列的rear
- 因此,当两个栈中存储以相反的次序存储相同的元素时,就实现了队列
3. 代码实现
import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(node); stack2.clear(); Stack<Integer> stack = (Stack<Integer>) stack1.clone(); while(!stack.empty()){ stack2.push(stack.pop()); } } public int pop() { int pop = stack2.pop(); stack1.clear(); Stack<Integer> stack = (Stack<Integer>) stack2.clone(); while(!stack.empty()){ stack1.push(stack.pop()); } return pop; }}
4. 总结分析
- 使用了一个Stack作为临时存储的媒介,因为我发现使用iterator和toArray方法对Stack进行遍历始终不能得到正确的结果
- 使用iterator时,Stack的遍历是从栈的底部开始的,因此使用iterator.next()进行遍历时,使得两个栈中的数据相同,而本题目希望的正确的结果是两个栈中存储的内容是相反的。
- 使用Stack.toArray()方法会返回一个Object[]类型的数组,通过强制转换成一个Integar[]的数组,本身做法就是错误的,运行时会抛出
java.lang.ClassCastException
异常。
5. 改进方案
通过参考网友的一些做法,发现了一种更好的解题思路:
有两个栈,栈1和栈2.当入栈的时候,我们将它全放进栈1中,当需要出栈的时候,我们将栈1出栈到栈2中,然后再将栈2依次出栈。
具体的代码如下:
链接:https://www.nowcoder.com/questionTerminal/54275ddae22f475981afa2244dd448c6
来源:牛客网
import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.push(new Integer(node)); } public int pop() { if(stack2.isEmpty()){ while(!stack1.isEmpty()){ stack2.push(stack1.pop()); } } return stack2.pop().intValue(); }}
此做法不仅节省了空间,也使得和删除操作更加简单。
0 0
- 用两个栈实现队列 & 用两个队列实现栈
- 用两个队列实现栈&用两个栈实现队列
- 用两个栈实现队列 & 两个队列实现一个栈
- 两个栈实现队列&&用两个队列实现一个栈
- 用两个栈实现队列 & 两个队列实现栈
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个队列实现栈
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个队列实现栈
- 用两个栈实现队列
- 用两个队列实现栈
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个栈实现队列
- 变态跳台阶
- 调整数组顺序使奇数位于偶数之前
- Linux nohup command &后台运行程序+前后台切换命令
- 如何实现一个平滑的颜色过渡
- 浮点型数据存储方式浅析
- 用两个栈实现队列
- JQuery 中 AJAX 如何实现 Excel 文件 下载
- jdbc将图片(二进制文件如电影,音乐等)插入数据库
- python多线程操作报错:No handlers could be found for logger "websocket"
- POCR-project-out cascaded regression for face alignment
- 杭电4499 Cannon DFS 搜索
- 算法提高 连接乘积
- 学生选课系统
- 0508