package shujujiegou.Stack;
import java.util.Stack;
/*
实现一个栈, 栈 带有 出栈 入栈 取最小元素
时间复杂度为o(1)
*/
public class GetStack {
//主栈
private Stack mainStack=new Stack<>();
//辅助栈
private Stack minStack=new Stack<>();
public static void main(String[] args) throws Exception {
//入栈
GetStack getStack=new GetStack();
getStack.push(4);
getStack.push(9);
getStack.push(7);
getStack.push(3);
getStack.push(8);
getStack.push(5);
//获取最小栈元素
int g=getStack.getMin();
System.out.println(g);
//出栈
getStack.pop();
getStack.pop();
getStack.pop();
//获取最小栈元素
int g2=getStack.getMin();
System.out.println(g2);
}
/**
* 入栈
* @param element 入栈元素
*/
private void push(int element) {
mainStack.push(element);
//如果辅助栈为空 或者 新元素 小于 辅助栈顶源 将新元素 压入栈
if (minStack.empty() || minStack.peek() >= element)
minStack.push(element);
}
/**
* 获取栈最小元素
* @return
*/
private int getMin() throws Exception {
if(mainStack.empty()) {
throw new Exception("栈为空");
}
return minStack.peek();
}
/**
* 出栈操作
*/
private void pop() {
//如果 出栈元素 和 辅助栈 元素 相等 辅助栈出栈
if (mainStack.peek() .equals( minStack.peek() )){
minStack.pop();
}
mainStack.pop();
}
}