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();
    			
    		}
    		
    		
    		
    	}
    	
    	
    }
    

      

  • 相关阅读:
    实现单台测试机6万websocket长连接
    关于ArcGIS10.0中的栅格计算中的函数
    .NET破解之迅捷PDF转换器(续)
    ArcEngine 0x8004023C
    VS2010中重命名项目
    地理数据库本身不能加密
    ArcEngine尝试读取或写入受保护的内存
    利用路由器连接别人家的网络
    ArcGIS的许可文件问题
    MapGIS转Shp文件的单位问题
  • 原文地址:https://www.cnblogs.com/toov5/p/7510551.html
Copyright © 2011-2022 走看看