问题:实现一个特殊的栈,在实现栈的基本功能的基础上,在实现返回栈中最小元素的操作。
思路:
设计两个栈,一个栈stackData当做普通栈,用来进行出栈与入栈。
另一个栈stackMin用来保存普通栈中最小的元素。
入栈:
stackData栈正常入栈,判断stackMin是否为空,为空则元素也入stackMin栈,否则,判断要入栈元素是否比stackMin栈顶元素小,若小,入栈元素也要入stackMin栈。
出栈:
stackData栈正常出栈,判断stackMin栈顶元素是否与出栈元素相等,若相等,则stackMin栈顶元素也要出栈,否则不出栈。
代码如下:
public class Main {
private Stack<Integer> stackData;
private Stack<Integer> stackMin;
public Main(){
this.stackData = new Stack();
this.stackMin = new Stack();
}
public void push(int newNum){
if(this.stackMin.isEmpty()){
this.stackMin.push(newNum);
}else if(newNum<=this.getmin()){
this.stackMin.push(newNum);
}
this.stackData.push(newNum);
}
public int pop(){
if(this.stackData.isEmpty()){
throw new RuntimeException("栈空");
}
int value = this.stackData.pop();
if(value == this.getmin()){
this.stackMin.pop();
}
return value;
}
public int getmin(){
if(this.stackMin.isEmpty()){
throw new RuntimeException("栈空");
}
return this.stackMin.peek();
}
}