zoukankan      html  css  js  c++  java
  • 算法总结之 两个栈组成的队列

    编写一个类,用两个栈实现队列,支持队列的基本操作(add poll peek)

    栈的特点是先进后出,而队列是先进先出。用两个栈正好能把顺序反转过来实现类似队列的操作

    具体实现:

     一个栈作为压入栈,在压入数据时候,在压入数据时只往这个栈中压入,记为 stackPush

     另一个栈只作为弹出栈,在弹出数据时只从这个栈弹出,记为 stackPop

    1 如果stackPush要往stackPop中压入数据, 那么必须一次性把stackPush中的数据全部压入

    2 如果stackPop不为空,stackPush 绝对不能向stackPop中压入数据

    那么 压入数据的操作在何时发生呢?

       这个选择的时机有很多,调用 add  poll peek 三种方法中的任何一种时发生 压入数据 都是可以的 

    看代码:

    package TT;
    
    import java.util.Stack;
    
    public class Test121 {
    
    	public class TwoStacksQueue{
    		
    		public Stack<Integer> stackPush;
    		public Stack<Integer> stackPop;
    		
    		public TwoStacksQueue(){
    			stackPush=new Stack<Integer>();
    			stackPop = new Stack<Integer>();
    		}
    		public void add(int pushInt){
    			stackPush.push(pushInt);   //一个用来压入数据用的
    		}
    		public int poll(){
    			if(stackPop.empty() && stackPop.empty()){
    				throw new RuntimeException("queue is empty!");
    			}else if(stackPop.empty()){
    			    while(!stackPush.empty()){
    			    	stackPop.push(stackPush.pop());
    			    }	
    			}
    			return stackPop.pop();
    		}
    		
    		public int peek(){
    			if(stackPop.empty() && stackPush.empty()){
    				throw new RuntimeException("queue is empty!");
    			}else if(stackPop.empty()){
    				while(!stackPush.empty()){
    					stackPop.push(stackPop.pop());
    				}
    			}
    			return stackPop.peek();
    			
    		}
    		
    		
    		
    	}
    	
    	
    }
    

      

  • 相关阅读:
    关于范型
    c#.net实体类序列化方法  为什么要序列化
    游标示例
    干掉switch语句
    java面向对象总结(一)
    Java泛型简明教程(转)
    java 成员变量、局部变量、静态变量
    Java 集合类图(转)
    java泛型(擦除)
    java垃圾回收
  • 原文地址:https://www.cnblogs.com/toov5/p/7510551.html
Copyright © 2011-2022 走看看