自己编写一个栈,该栈含有min方法,能得到栈中在最小元素。
分析:使用两个栈,第一个栈用来存储数据,第二个栈用来存储最小的数据,每次压栈的时候都和第二个栈的栈顶元素比较,如果小于栈顶的话就压入第二个栈。
代码如下:
package problem2;
import java.util.*;
//import java.util.Stack;
/**
* @author Hutongling
*/
class myStack<T>{
LinkedList<T> list=new LinkedList<T>();
public void push(T value){
list.addLast(value);
}
public void pop(){
list.removeLast();
}
public T peek(){
return list.getLast();
}
public int size(){
return list.size();
}
public boolean empty(){
return list.isEmpty();
}
}
class StackWithMin<T> {
myStack<Integer> data_Stack=new myStack<Integer>();
myStack<Integer> min_Stack=new myStack<Integer>();
public void push(Integer value){
data_Stack.push((Integer) value);
if(min_Stack.size()==0 || (value < min_Stack.peek()))
min_Stack.push(value);
else
min_Stack.push(min_Stack.peek());
}
public void pop(){
if(data_Stack.size()>0 && min_Stack.size()>0){
data_Stack.pop();
min_Stack.pop();
}
}
public void stackMin(){
if(data_Stack.size()>0 && min_Stack.size()>0)
System.out.println(min_Stack.peek());
min_Stack.pop();
}
}
public class 包含min函数的栈 {
public static void main(String[] args) {
StackWithMin<Integer> stackWithMin=new StackWithMin<Integer>();
stackWithMin.push(3);
stackWithMin.push(4);
stackWithMin.push(2);
stackWithMin.push(1);
stackWithMin.push(0);
stackWithMin.push(-1);
stackWithMin.pop();
stackWithMin.pop();
stackWithMin.stackMin();
}
}
输出结果:
1