最小栈的实现
实现最小栈:首先需要两个栈
首先:定义stack 和 minStack
入栈时,数据总会入到第一个栈 stack 中
放入到 minStack 栈时:
若为第一次入栈,则将数据元素直接放入stackTmp栈中;
若不是第一次入栈,每次与 minStack 栈顶元素比较,若比栈顶元素小,则放入。
即保证 minStack 栈顶是入栈元素的最小值。
出栈时:在stack不为空的条件下, 比较stack 和minStack 栈顶的元素,
若栈顶元素相同,则都出栈
若不同,则将stack栈顶元素直接出栈
class MinStack {
public Stack<Integer> stack;
public Stack<Integer> minStack;
public MinStack(){
stack = new Stack<>();
minStack = new Stack<>();
}
public void push(int x){
//1、stack栈内一定会入栈
stack.push(x);
//2、第一次minStack一定会放元素,其余的每次和minStack的栈顶比较
if(minStack.empty()){
minStack.push(x);
}else{
if(x <= minStack.peek()){
minStack.push(x);
}
}
}
public void pop(){
if(stack.empty()){
return;
}
int num = stack.pop();
if(num == minStack.peek()){
minStack.pop();
}
}
public int top() {
if(stack.empty()){
return -1;
}
int oldData = stack.peek();
return oldData;
}
public int getMin(){
if(minStack.empty()){
return -1;
}
int min = minStack.peek();
return min;
}
}
public class TestDemo4 {
public static void main(String[] args) {
MinStack minStack = new MinStack();
minStack.push(1);
minStack.push(3);
minStack.push(-3);
minStack.push(-2);
minStack.push(4);
System.out.println(minStack.getMin());//-3
System.out.println(minStack.top());//4
minStack.pop();//4
minStack.pop();//-2
System.out.println(minStack.top());//-3
System.out.println(minStack.getMin());//-3
}
}