用两个栈实现队列
来源:互联网 发布:linux 粘贴命令 编辑:程序博客网 时间:2024/05/19 18:46
链接:https://www.nowcoder.com/questionTerminal/54275ddae22f475981afa2244dd448c6
来源:牛客网
来源:牛客网
- 热度指数:164757 时间限制:1秒 空间限制:32768K
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
分析:栈的特点是先进后出,队列的特点是先进先出。两个栈中一个作为压入栈stack1,只往这个栈压入数据;另一个栈作为弹出栈stack2,在将stack1中的元素都压人stack2后,从stack2中弹出数据。必须要做到以下两点:(参考左程云《程序员代码面试指南 IT名企算法与数据结构题目最优解》一书中思路)
1.若压入栈stack1要往弹出栈stack2压入数据,必须一次性把stack1中的数据全部压入;例如:1~5依次压入stack1,stack1的栈顶到栈底为5~1,从stack1压入stack2时,只将5和4压入了stack2,了stack1还剩下1、2、3没有压入。此时若进行弹出操作,那么4将最先弹出,与预想的队列顺序就不一直。
2.若弹出栈stack2不为空,压入栈stack1不能向stack2中压入数据。例如:1~5依次压入stack1,stack1将所有的数据压入stack2,此时stack2的栈顶到栈底就变成了1~5.此时又有6~10依次压入stack1,stack2不为空,stack1不能向其中压入数据。如果向stack2压入了数据,stack2的栈顶到栈底元素就变成了6~10、1~5,此时若进行弹出操作,那么6将最先弹出,与预想的队列顺序就不一直。
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); } public int pop() { if(stack1.empty() && stack2.empty()) throw new RuntimeException("Queue is empty !"); else if(stack2.empty()){ while(!stack1.empty()) stack2.push(stack1.pop()); } return stack2.pop(); }}
阅读全文
0 0
- 用两个栈实现队列 & 用两个队列实现栈
- 用两个队列实现栈&用两个栈实现队列
- 用两个栈实现队列 & 两个队列实现一个栈
- 两个栈实现队列&&用两个队列实现一个栈
- 用两个栈实现队列 & 两个队列实现栈
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个队列实现栈
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个队列实现栈
- 用两个栈实现队列
- 用两个队列实现栈
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个栈实现队列
- cpio打包和压包的方法示例
- 5.6 final关键字
- Fabric自动化部署的简单使用
- wxWidgets教程(16)——wxMenuBar、wxToolBar与wxStatusBar用法
- 论Linux文件系统
- 用两个栈实现队列
- 计算机视觉中,有哪些比较好的目标跟踪算法?(下)
- msyql完全离线安装(系统为ubuntu14 32位系统, MySQL为32位数据库,依赖包全部都有详细说明)
- python 切片+增删改查...
- [BZOJ2120][BZOJ2453]-带修改莫队-时间复杂度理解
- 第六章 接口与实现 编程题
- HDUOJ 2048
- linux python 安装opencv出错
- springboot