剑指offer_栈和队列---用两个栈实现一个队列
来源:互联网 发布:人工智能与机器人关系 编辑:程序博客网 时间:2024/06/03 23:43
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路
1,用stack1来充当入队,将stack1所有元素出栈到stack2,然后stack2出栈,实现先进先出。
2,三种算法,一种比一种优化
/** * */package 栈和队列;import java.util.Stack;/** * <p> * Title:StacktoQueue * </p> * <p> * Description: * </p> * * @author 田茂林 * @data 2017年8月22日 上午10:16:19 */public class StacktoQueue { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); //==================================================普通方法=============================== public void push(int node) { stack1.push(node); } public int pop() { while(!stack1.isEmpty()){ stack2.push(stack1.pop()); //把stack1的所有元素入栈到2 } int num = stack2.pop(); //返回值为2出栈 while(!stack2.isEmpty()){ stack1.push(stack2.pop()); //把2中所有元素重新放回到1 } return num; //操作数过多 } //==================================================优化=============================== public void push1(int node) { stack1.push(node); } public int pop1() { while(stack1.size()>1){ stack2.push(stack1.pop()); //栈1里只剩一个元素,用于出栈 } int num = stack1.pop(); //栈1出栈 while(!stack2.isEmpty()){ //把剩下的元素重新放回栈1 stack1.push(stack2.pop()); } return num; } //==================================================更加优化=============================== public void push2(int node) { stack1.push(node); } public int pop2() { if(stack1.isEmpty()&&stack2.isEmpty()) throw new RuntimeException("queue is empty"); if(stack2.isEmpty()){ //只有栈2空的时候才把栈1的放进去,这样避免了频繁的操作 while(!stack1.isEmpty()){ stack2.push(stack1.pop()); } } return stack2.pop(); } public static void main(String[] args) { // TODO Auto-dgenerated method stub }}
阅读全文
0 0
- 剑指offer_栈和队列---用两个栈实现一个队列
- 剑指offer_用两个栈实现队列
- 4.剑指offer_用两个栈模拟一个队列
- 剑指Offer_编程题 用两个栈实现队列
- 剑指Offer_面试题07_用两个栈实现队列
- 用两个栈实现队列 & 两个队列实现一个栈
- 两个栈实现队列&&用两个队列实现一个栈
- 用两个栈实现一个队列和用两个队列实现一个栈
- 用两个栈实现一个队列和用两个队列实现一个栈
- 用两个栈实现一个队列:实现出队列和入队列功能,用两个队列实现一个栈
- 《剑指offer》栈和队列——用两个栈实现一个队列
- 用两个栈实现队列和用两个队列实现一个栈
- 用两个栈实现队列和用两个队列实现一个栈
- 用两个栈实现队列和用两个队列实现一个栈
- 面试题7:用两个栈实现队列和用两个队列实现一个栈
- 用两个栈实现队列和用两个队列实现一个栈
- 简单题_用两个栈实现队列和用两个队列实现一个栈
- 【剑指offer】用两个栈实现一个队列,用两个队列实现一个栈
- java 引用类型 虚引用
- Codeforces Educational Codeforces Round 27
- 平台设备和驱动是怎么匹配的?
- 每天一个linux命令(48):watch命令
- [PAT]1001 A+B Format (20)
- 剑指offer_栈和队列---用两个栈实现一个队列
- 矩阵快速幂
- idea 创建java maven项目
- Linux DHCP服务器配置
- spring + quart 配置版本问题
- 人工智能领域技术博客
- 全排列算法递归与非递归解析+代码
- 每天一个linux命令(49):at命令
- Android性能优化(中)