找出棧中最小的元素

package stack;


/**
 * 找出棧中最小的元素
 * 先定義一個輔助棧,棧頂永遠存最小的元素。如原棧中添加元素比輔助棧頂元素大,輔助棧的棧頂元素複製一遍
 * 放到輔助棧中,如果小,則直接放到輔助棧中。
 */
import java.util.Stack;


public class MinStack {
private Stack<Integer> stack=new Stack<Integer>();
private Stack<Integer> minStack=new Stack<Integer>();
public void push(int data){
stack.push(data);
if(minStack.size()==0 || minStack.peek()>data)
minStack.add(data);
else{
int date=minStack.peek();
minStack.add(date);//核心代碼,peek返回的是棧頂代碼
System.out.println("peek="+date+":minsize="+minStack.size());
}
}

public int pop() throws Exception{
if(stack.size()==0)
throw new Exception("棧中空了");
int data=stack.pop();
System.out.println("data="+data);
int mindata=minStack.pop();//核心代碼,原棧出,輔助棧也出。
System.out.println("mindata="+mindata);
return data;
}
public Object min() throws Exception{
if(minStack.size()==0)
throw new Exception("棧中空了");
return minStack.peek();
}
public static void main(String[] args) throws Exception {
MinStack  minstack=new MinStack();
minstack.push(5);
minstack.push(7);
minstack.push(3);
minstack.push(4);
System.out.println(minstack.pop());
System.out.println(minstack.pop());
System.out.println("min="+minstack.min());

}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章