1.栈的GetMin
package zuochengyun.dynamic;
import java.util.Stack;
public class GetMinStack{
public Stack<Integer> mainStack=new Stack<>();
public Stack<Integer> assistantStack=new Stack<>();
public void push(int number){
if(this.assistantStack.empty())
this.assistantStack.push(number);
else if(number>=this.getMin())
this.assistantStack.push(this.getMin());
else if(number<this.getMin())
this.assistantStack.push(number);
this.mainStack.push(number);
}
public Integer pop(){
if(this.mainStack.empty()){
throw new RuntimeException("your stack is empty!");
}
this.assistantStack.pop();
return this.mainStack.pop();
}
public int getMin(){
return assistantStack.peek();
}
public boolean empty() {
if(this.mainStack.empty())
return true;
else
return false;
}
}
///
2.用栈实现队列
package zuochengyun.dynamic;
import java.util.Stack;
public class TowStack {
public Stack<Integer> pushStack=new Stack<>();
public Stack<Integer> popStack=new Stack<>();
public void add(int number){
pushStack.add(number);
}
public int poll(){
if(pushStack.empty()&&popStack.empty()){
throw new RuntimeException("your queue is empty!");
}
//倒入popStack时的条件:popStack为空并且一次性全部倒入
else if(popStack.empty()){
while(!pushStack.empty())
popStack.push(pushStack.pop());
}
return popStack.pop();
}
public int peek(){
if(pushStack.empty()&&popStack.empty()){
throw new RuntimeException("your stack is empty!");
}else if(popStack.empty()){
while(!pushStack.empty())
popStack.push(pushStack.pop());
}
return popStack.peek();
}
}
/
3队列的GetMin
package zuochengyun.dynamic;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import org.omg.CORBA.PUBLIC_MEMBER;
/**
* 1.用的GetMinStack要自己构造empty()
* 2. mainStack和assistStack有可能在某个时刻其中一个为空,所以在取最小值的时候任取这两个栈中的不为空的栈的最小值即可
* @author SUN
*/
public class GetMinQueue{
public GetMinStack mainStack=new GetMinStack();
public GetMinStack assistStack=new GetMinStack();
//入队
public void add(int number){
this.mainStack.push(number);
}
//出队并返回值
public int poll(){
if(this.mainStack.empty()&&assistStack.empty())
throw new RuntimeException("your queue is empty!");
else{
while(!this.mainStack.empty())
this.assistStack.push(this.mainStack.pop());
}
return this.assistStack.pop();
}
//获取当前队列中最小值
public int getMin(){
if(this.mainStack.empty())
return this.assistStack.getMin();
else
return this.mainStack.getMin();
}
}
转载于:https://my.oschina.net/u/2309946/blog/671468