• 第2题:设计包含min函数的栈


    欢迎转载,转载请务必注明出处:http://blog.csdn.net/alading2009/article/details/44620511

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

    新元素入栈时,将包括自身在内的所有元素中的最小值保存在自身节点的minData中,这样不管出栈/入栈,栈顶都将永远保存当前所有元素的最小值。

    package test002;
    
    /**
     * Created by cq on 2015/3/25.
     * 节点node的定义
     */
    public class Node {
        private int data;
        private int minData;
        private Node next;
        public Node(int data){
            this.data = data;
            this.next = null;
            this.minData = data;
        }
        public int getData() {
            return data;
        }
    
        public void setData(int data) {
            this.data = data;
        }
    
        public Node getNext() {
            return next;
        }
    
        public void setNext(Node next) {
            this.next = next;
        }
        public int getMinData() {
            return minData;
        }
    
        public void setMinData(int minData) {
            this.minData = minData;
        }
    }
    package test002;
    
    /**
     * Created by cq on 2015/3/25.
     * 第二题:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素
     * 要求:函数min、push以及pop的时间复杂度为O(1)
     */
    public class MinStack {
        private Node stack;
        public MinStack(){
            stack = null;
        }
        public boolean isEmpty(){
            return stack == null;
        }
        //返回最小值,不对栈进行操作
        public int getMinData(){
            if (isEmpty()){
                //用int型的最大值表示异常
                return Integer.MAX_VALUE;
            }
            return stack.getMinData();
        }
        public int pop(){
            if (isEmpty()){
                return Integer.MAX_VALUE;
            }
    
            int temp = stack.getData();
            stack = stack.getNext();
            return temp;
        }
        public void push(int data){
            Node node = new Node(data);
            if (!isEmpty()){
                if (node.getMinData() > stack.getMinData()){
                    node.setMinData(stack.getMinData());
                }
                node.setNext(stack);
            }
            stack = node;
        }
        public static void main(String[] args){
            MinStack minStack = new MinStack();
            minStack.push(5);
            System.out.println(minStack.getMinData());
            minStack.push(9);
            System.out.println(minStack.getMinData());
            minStack.push(4);
            System.out.println(minStack.getMinData());
            minStack.push(3);
            System.out.println(minStack.getMinData());
            minStack.push(1);
            System.out.println(minStack.getMinData());
            minStack.pop();
            System.out.println(minStack.getMinData());
            minStack.pop();
            System.out.println(minStack.getMinData());
            minStack.pop();
            System.out.println(minStack.getMinData());
        }
    }
    
    
    版权所有,转载请注明出处 http://www.cnblogs.com/read-the-spring-and-autumn-annals-in-night/
  • 相关阅读:
    ubuntu下wget的配置文件在哪里
    ubuntu下apt-get的配置文件是哪个
    Jar包方式运行web项目
    深入浅说服务如何以Jar包的方式发布
    maven 私服的setting.xml配置
    maven 配置私服 连接
    一、Spring MVC起步——IntelliJ IDEA 搭建Spring MVC环境(手把手搭建)
    intellij IDEA配置tomcat
    maven工程项目与项目之间的依赖方式
    手动创建Maven项目并建立两个项目之间的依赖关系
  • 原文地址:https://www.cnblogs.com/read-the-spring-and-autumn-annals-in-night/p/12041994.html
Copyright © 2020-2023  润新知