Java通过两个栈实现队列
2016-08-03 17:02
337 查看
package two_stack_to_queue; import java.util.Stack; /** * Created by renren on 16/8/3. * * 通过两个栈实现队列 * * * 原理思想: * 建两个栈,stackNewest和stackOldest。要始终保持:newStack的栈顶总是存放着最新的元素,oldStack的栈顶总是存放着最旧的元素。 * 而且为了尽量减少栈之间的倒腾,只有在必须时(peek或pop)才倒腾栈。 * * 建立两个栈,一个newStack如果有新的值来就直接加入到新栈, * 为了减少两个栈的互相倒腾,在出栈的时候就判断oldStack里面有没有数据,如果没有数据的就将newStack里面的数据出栈 * 到oldStack中,此时oldStack中就是queue的顺序。 */ public class StackToQueue<T> { Stack<T> newStack = new Stack<>(); Stack<T> oldStack = new Stack<>(); /** * 有新的值过来的时候就直接将其加入到 newStack * @param value */ public void add(T value){ newStack.push(value); } public T peek(){ /** * 如果旧的栈里面存有值,则直接返回。 */ if (!oldStack.isEmpty()){ return oldStack.peek(); } /** * 如果oldStack为空就将newStack中的数据倒腾到oldStack */ while (!newStack.isEmpty()){ oldStack.push(newStack.pop()); } return oldStack.peek(); } public T pop(){ /* * 如果旧的栈里面存有值,则直接返回。 */ if (!oldStack.isEmpty()){ return oldStack.pop(); } /** * 如果oldStack为空就将newStack中的数据倒腾到oldStack */ while (!newStack.isEmpty()){ oldStack.push(newStack.pop()); } return oldStack.pop(); } public int size(){ return oldStack.size()+newStack.size(); } public static void main(String []args){ StackToQueue<Integer> sq = new StackToQueue<>(); for (int i = 0;i<10;i++){ sq.add(i); System.out.println("sq.Size()"+sq.size()); } System.out.println("构建完毕"); int j =0; while (j<5){ System.out.println("-->"+sq.pop()); j++; } for (int i = 10;i<20;i++){ sq.add(i); System.out.println("sq.Size()"+sq.size()); } System.out.println("2构建完毕"); j = 0; while (j<15){ System.out.println("-->"+sq.pop()); j++; } } }
相关文章推荐
- java实现——007用两个栈实现队列
- 用两个栈实现一个队列的功能,用Java实现
- 一元多项式的乘法与加法运算【Java实现--通过单项链表实现队列】
- java通过LinkedList实现堆栈和队列数据结构
- java通过ActiveMQ实现JMS的消息队列实例
- 每天一个小算法(6)---- 通过两个栈实现一个队列
- Java实现队列二:通过数组方式实现
- java-用两个栈实现队列&&用两个队列实现一个栈
- JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)
- 《剑指offer》用两个队列实现栈 Java版实现
- 两个栈实现队列+两个队列实现栈----java
- 剑指Offer面试题7(Java版):用两个栈实现队列与用两个队列实现栈
- java-用两个栈实现队列&&用两个队列实现一个栈
- java---用两个栈实现队列&&用两个队列实现栈
- java中把两个变量进行值交换,通过异或两次运算就能实现值互换。
- java实现两个栈模拟实现队列出队
- 剑指offer--面试题7:用两个栈实现队列--Java实现
- 【Java】用两个栈实现一个队列Myqueue类
- Java通过缓存队列执行任务代码实现
- 两个栈实现一个队列以及两个队列实现一个栈(Java)