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