获取栈中最小值

import java.util.Stack;

/**
 * @author chencc
 * @Description 获取栈中最小值
 * @Date 2022/3/16 15:06
 */
public class GetMinStack {
    //构建一个栈
    public static class MyStack {
        //真实栈用来存放数据
        public Stack<Integer> stackData;
        //存在当前栈数据中,最小数
        public Stack<Integer> stackMin;

        //构造器,初始化
        public MyStack() {
            this.stackData = new Stack<Integer>();
            this.stackMin = new Stack<Integer>();
        }

        //插入数据
        public void push(int value) {
            //当最小栈为空时,直接插入当前数
            if (stackMin.isEmpty()) {
                stackMin.push(value);

                //当插入数小于当前栈顶的数,直接插入当前数
            } else if (value < stackMin.peek()) {
                stackMin.push(value);

                //此时插入当前栈顶的数
            } else {
                stackMin.push(stackMin.peek());
            }
            stackData.push(value);
        }

        //弹出栈数据
        public int pop() {
            if (stackData.isEmpty()) {
                throw new RuntimeException("当前栈为空");
            }
            stackMin.pop();
            return stackData.pop();
        }

        //获取栈中最小值
        public int getMin() {
            if (stackMin.isEmpty()) {
                throw new RuntimeException("当前栈为空");
            }
            return stackMin.peek();
        }
    }

    public static void main(String[] args) {
        MyStack stack = new MyStack();
        stack.push(3);
        stack.push(0);
        System.out.println(stack.getMin());
        stack.pop();
        System.out.println(stack.getMin());
    }
}

版权声明:本文为mengduan913原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。