查詢每次pop之後棧中的最小值,如對於棧3,1,2(棧頂),當pop=2時,min=1;當pop=1時,min=3;當pop=3時,min=null.
package com.inspire.chapter2;
import java.util.Stack;
public class GetMinStack {
// 查詢每次pop之後棧中的最小值,如對於棧3,1,2(棧頂),當pop=2時,min=1;當pop=1時,min=3;當pop=3時,min=null;
public static class MyStack1 {
private Stack<Integer> stackData;
private Stack<Integer> stackMin;
public MyStack1() {
stackData = new Stack<Integer>();
stackMin = new Stack<Integer>();
}
// 返回最小棧的棧頂
public int getMin() {
if (stackMin.isEmpty()) {
throw new RuntimeException("最小棧爲空");
}
return stackMin.peek();
}
public void push(int value) {
if (stackMin.isEmpty()) {
stackMin.push(value);
} else if (value < getMin()) {
stackMin.push(value);
} else {
stackMin.push(getMin());
}
stackData.push(value);
}
public int pop() {
if (stackData.isEmpty()) {
throw new RuntimeException("數據棧已空");
}
stackMin.pop();
return stackData.pop();
}
}
public static void main(String[] args) {
MyStack1 stack1 = new MyStack1();
stack1.push(1);
System.out.println("當前棧的最小元素爲:" + stack1.getMin());
stack1.push(5);
System.out.println("當前棧的最小元素爲:" + stack1.getMin());
stack1.push(2);
System.out.println("當前棧的最小元素爲:" + stack1.getMin());
stack1.push(0);
System.out.println("當前棧的最小元素爲:" + stack1.getMin());
stack1.push(0);
System.out.println("當前棧的最小元素爲:" + stack1.getMin());
stack1.push(-1);
System.out.println("當前棧的最小元素爲:" + stack1.getMin());
System.out.println("將元素" + stack1.pop() + "出棧");
System.out.println("當前棧的最小元素爲:" + stack1.getMin());
System.out.println("將元素" + stack1.pop() + "出棧");
System.out.println("當前棧的最小元素爲:" + stack1.getMin());
System.out.println("將元素" + stack1.pop() + "出棧");
System.out.println("當前棧的最小元素爲:" + stack1.getMin());
System.out.println("將元素" + stack1.pop() + "出棧");
System.out.println("當前棧的最小元素爲:" + stack1.getMin());
System.out.println("將元素" + stack1.pop() + "出棧");
System.out.println("當前棧的最小元素爲:" + stack1.getMin());
System.out.println("將元素" + stack1.pop() + "出棧");
System.out.println("當前棧的最小元素爲:" + stack1.getMin());
}
}