zoukankan      html  css  js  c++  java
  • java 栈 【1】

    参考:http://kevin-in-java.iteye.com/blog/1223149

    定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。

    核心思想:添加辅助栈,将最小值也添加到辅助栈,出栈时,如果是最小值,辅助栈也要出栈。

    备注:此处采用顺序栈,无法扩大存储面积,可参考链接日志采用链栈;

              出栈的数据类型采用Integer考虑到可能出栈不成功,int无法满足,则以NULL表示无法出栈成功

       要注意Integer和int的转换问题。 以及Integer.valueOf(int i), integer.equals(int i)

    另外:程序一定要测试啊,不要想当然认为小程序就是对的!惨痛的教训

    //辅助类
    /**
     * Copyright 2013
     * @author Xie Yifeng
     * Created on 2013 2013-3-22
     */
    package xyf.second;
    
    /**
     *  辅助栈
     */
    public class AssistStack {
        final int maxSize = 100;
        private int[] data;
        private int top;
        
        public AssistStack(){
            data = new int[maxSize];
            top = -1;
        }
        public int getTop(){
            return top;
        }
        
        public void push(int a){
            if(top>=maxSize-1)
                return;
            data[++top] = a;
        }
        
        public Integer pop(){
            Integer temp = null;
            if(top<0)
                return null;
            temp = Integer.valueOf(data[top--]);
            return temp;
        }
        
        public Integer getPos(){
            Integer temp = null;
            if(top<0)
                return null;
            temp = Integer.valueOf(data[top]);
            return temp;
        }
    }
    //栈
    /**
     * Copyright 2013
     * @author Xie Yifeng
     * Created on 2013 2013-3-22
     */
    package xyf.second;
    
    /**
     *
     */
    public class MyStack {
        final int maxSize = 100;
        private AssistStack asStack;
        private int[] data;
        private int top;
        
        
        public MyStack(){
            asStack = new AssistStack();
            data = new int[maxSize];
            top = -1;
        }
        
        
        public void push(int a ){
            if(top>=maxSize-1)
                return;
            data[++top]= a;
            if(top==0)
                asStack.push(a);
            else{
                if(a<=asStack.getPos())
                    asStack.push(a);
            }
        }
        
        public Integer pop(){
            Integer temp;
            if(top<0)
                return null;
            if(asStack.getPos().equals(data[top]))
                asStack.pop();
            temp = Integer.valueOf(data[top--]);
            return temp;
        }
        
        public Integer Min(){
            if(top<0)
                return null;
            else return asStack.getPos();
        }
        
        public boolean hasNext(){
            if(top>=0)
                return true;
            else return false;
        }
        
        public static void main(String[] args){
            MyStack my = new MyStack();
            int[] table =  new int[5];
            int i =0;
            for(;i<5;i++){
                table[i] = (int)(Math.random()*100);
                System.out.println(table[i]);
                my.push(table[i]);
            }
            System.out.println("最小值:"+my.Min());
            System.out.println("最小值:"+my.Min());
            while(my.hasNext()){
                
                System.out.println("输出:"+my.pop()+ " 最小值:" + my.Min());
            }
        }
    }

    源代码在文件: java栈Min中

  • 相关阅读:
    Keras学习笔记——Hello Keras
    记一次线上事故的JVM内存学习
    postgresql中的search_path
    CentOS7安装setuptools
    CentOS7安装EPEL的两种方式
    Ncures库的介绍与安装
    CentOs6.5 安装Zlib
    Centos 安装zlib
    Windows如何压缩tar.gz格式
    nginx运行文件出错env: /etc/init.d/nginx: No such file or directory
  • 原文地址:https://www.cnblogs.com/nkxyf/p/2976482.html
Copyright © 2011-2022 走看看