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

      

  • 相关阅读:
    使用java中的注解@see
    MacOS软件默认安装路径
    学习MACD指标
    go CD 用虚拟机快速增加一个新agent
    git推送本地分支到远程分支
    git如何切换远程仓库
    git命令查看远程分支
    Java 学习札记(一)JDK安装配置
    Oracle 基本操作符
    C# 常用控件属性及方法介绍
  • 原文地址:https://www.cnblogs.com/toov5/p/7510551.html
Copyright © 2011-2022 走看看