包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

由于在给定的代码中有 import java.util.Stack; 所以就直接用Stack来实现。这里使用了两个栈,一个(stack)用来保存所有push进来的元素,另一个(minStack)用来保存按照push的顺序的非递增元素。每次调用push的时候,直接调用stack的push,并且如果要加入的这个元素加入minStack后也满足非递增的关系,那么就也将这个元素加入minStack中。调用pop的时候,直接调用stack的pop,并且如果这个被弹出的元素和minStack的栈顶元素相等的话,也将minStack的栈顶元素弹出。调用min的时候,直接读取minStack的栈顶元素。

import java.util.Stack;

public class StackTest {

    private Stack<Integer> stack = new Stack<>();       //存放所有元素
    private Stack<Integer> minStack = new Stack<>();    //按非递增存放一系列最小值

    public void push(int node) {
        stack.push(node);
        if (minStack.isEmpty()) {
            minStack.push(node);
        }
        else if (node <= minStack.peek()){
            minStack.push(node);
        }
    }

    public void pop() {
        if (minStack.peek().intValue() == stack.pop().intValue()) {
            minStack.pop();
        }
    }

    public int top() {
        return stack.peek();
    }

    public int min() {
        return minStack.peek();
    }
}

 

posted @ 2018-04-20 18:20  _weirdly  阅读(95)  评论(0编辑  收藏  举报