题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
解题思路
定义一个辅助栈空间,压栈时,数据栈正常压栈即可, 对于辅助栈,如果辅助栈为空,直接压即可入元素,如果不为空,则将当前压入的元素和辅助栈栈顶元素作比较,小于栈顶元素,则压入,否则,再压住栈顶元素。
补充:实际编程是很少使用Java的Stack对象的,因为其父对象为Vector,是多线程安全的,通过加锁实现,效率较低,用的比较少。
import java.util.Stack;
public class baohanminhanshudezhan {
Stack<Integer> stack = new Stack<>();
Stack<Integer> minStack = new Stack();
public void push(int node) {
stack.push(node);
if (minStack.isEmpty() || node <= minStack.peek()) {
minStack.push(node);
} else {
minStack.push(minStack.peek());
}
}
public void pop() {
if (!stack.isEmpty())
stack.pop();
if (!minStack.isEmpty())
minStack.pop();
}
public int top() {
if (!stack.isEmpty())
stack.peek();
return 0;
}
public int min() {
if (!minStack.isEmpty())
return minStack.peek();
else
return -1;
}
}