题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
思路:
1、创建两个栈,一个存放所有的数据,一个存放每次比较的最小的数据;
2、来第一个数据,直接进栈data_stack和min_stack;
3、之后每次来一个数据,都将之前min_stack的栈顶元素和新的数据进行比较,将最小的元素进栈min_stack;
4、每次都把最小元素压入min_stack,那么就能保证min_stack的栈顶一直都是最小元素,当最小元素从data_stack中被弹出后,同时弹出min_stack中的栈顶元素,那么min_stack中的新栈顶元素就是下一个最小值。
代码:
import java.util.Stack;
public class Solution {
Stack<Integer> data_stack=new Stack<Integer>();//存放所有的数据
Stack<Integer> min_stack=new Stack<Integer>();//存放每次比较最小的数据
public void push(int node) {
data_stack.push(node);//data_stack是存放所有的数据的,所以有数据就要进栈
if(min_stack.empty()||node<min_stack.peek()){//如果min_stack为空或者node的值小于min_stack的栈顶元素,则直接进栈
min_stack.push(node);
}else{
min_stack.push(min_stack.peek());
}
}
public void pop() {
data_stack.pop();
min_stack.pop();
}
public int top() {
if(min_stack.empty()){
return 0;
}
return min_stack.peek();
}
public int min() {
if(min_stack.empty()){
return 0;
}
return min_stack.peek();
}
}
栈的总结:
1、判断栈是否为空:
stack.empty();
2、查看栈顶元素,但不从栈中删除:
stack.peek();
3、返回对象在栈中的位置,以1位基数:
stack.search(element);
4、将对象压入栈顶部:
stack.push();
5、将对象从栈中弹出,返回该对象:
stack.pop();