用两个栈实现队列
来源:互联网 发布:淘宝空包代发靠谱吗 编辑:程序博客网 时间:2024/06/12 01:39
实现队列,就要实现它的3个方法:Enqueue(入队)、Dequeue(出队)和Peek(队头)。
1)stack1存的是每次进来的元素,所以Enqueue就是把进来的元素push到stack1中。
2)而对于Dequeue,一开始stack2是空的,所以我们把stack1中的元素全都pop到stack2中,这样stack2的栈顶就是队头。只要stack2不为空,那么每次出队,就相当于stack2的pop。
3)接下来,每入队一个元素,仍然push到stack1中。每出队一个元素,如果stack2不为空,就从stack2中pop一个元素;如果stack2为空,就重复上面的操作——把stack1中的元素全都pop到stack2中。
4)Peek操作,类似于Dequeue,只是不需要出队,所以我们调用stack2的Peek操作。当然,如果stack2为空,就把stack1中的元素全都pop到stack2中。
5)注意边界的处理,如果stack2和stack1都为空,才等于队列为空,此时不能进行Peek和Dequeue操作。
import java.util.Stack;public class Queue {private Stack<Object> stack1;private Stack<Object> stack2;public Queue(){stack1=new Stack<>();stack2=new Stack<>();} public void put(int data){if(stack1!=null){stack1.add(data);}}public int pop() throws Exception{if(stack2.size()==0){if(stack1!=null&&stack1.size()>0){while(stack1.size()!=0){stack2.add(stack1.pop());}}else{throw new Exception("null");}}return (int) stack2.pop();}/** * @param args * @throws Exception */public static void main(String[] args) throws Exception {// TODO Auto-generated method stubQueue queue=new Queue();queue.put(1);queue.put(2);queue.put(3);System.out.println(queue.pop());System.out.println(queue.pop());System.out.println(queue.pop());System.out.println(queue.pop());}}
- 用两个栈实现队列 & 用两个队列实现栈
- 用两个队列实现栈&用两个栈实现队列
- 用两个栈实现队列 & 两个队列实现一个栈
- 两个栈实现队列&&用两个队列实现一个栈
- 用两个栈实现队列 & 两个队列实现栈
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个队列实现栈
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个队列实现栈
- 用两个栈实现队列
- 用两个队列实现栈
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个栈实现队列
- 用两个栈实现队列
- Asp.net知识初步小结
- 表复制和数据复制
- 关于JDeveloper11.1.1.5无法加载SVN目录,报802错误的解决办法
- cocos2d工具集合
- VirtualBox 复制vdi文件和修改vdi的uuid
- 用两个栈实现队列
- 在线用户列表数据结构设计
- extern "C"和__declspec(dllexport)以及__declspec(dllimport) 和def的简单解析
- Sharepoint 2010项目配置记录
- Oracle常用表操作
- 关于sqlplus的简单概述
- c++ 中volatile关键字
- windows api 多线程
- javascript基础大全