题目:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
分析:
定义一个的栈用于保存最小值,
每次进栈一个元素就与当前最小值比较,判断是进栈最小值还是当前值,用以保证栈中每个位置对应的都是数据栈数据对应的最小值;
出栈时,数据栈与最小值栈都出栈一个元素,用以保证数据栈与最小值栈最小值的统一。
实现:
import java.util.Stack;
public class Program_21 {
Stack<Integer> data_s = new Stack<Integer>();// 保存元素数据
Stack<Integer> min_s = new Stack<Integer>();// 保存最小值
public void push(int node) {
data_s.push(node);
if (min_s.size() == 0 || node < top()) {
min_s.push(node);
} else {
min_s.push(top());
}
}
public void pop() {
if (data_s.size() != 0 && min_s.size() != 0) {
data_s.pop();
min_s.pop();
}
}
public int top() {
if (min_s.size() == 0) {
return -1;
}
return min_s.peek();
}
public int min() {
if (min_s.size() != 0) {
return top();
}
return -1;
}
}