1、用O(1)复杂度求栈中最小元素
public class MyStack1
{
MyStack<Integer> elem;
MyStack<Integer> min;
public MyStack1(){
elem = new MyStack<Integer>();
min = new MyStack<Integer>();
}
public void push(int data){
elem.push(data);
if(min.peek() == null||min.peek() >= data){
min.push(data);
}
}
public int pop(){
int topData = elem.pop();
if(topData == min.peek()){
min.pop();
}
return topData;
}
public int min(){
if(min.isEmpty())
return Integer.MAX_VALUE;
else
return min.peek();
}
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
MyStack1 stack = new MyStack1();
stack.push(4);
stack.push(2);
stack.push(2);
stack.push(9);
System.out.println("top element:"+stack.pop()+"; mim element:"+stack.min());
System.out.println("top element:"+stack.pop()+"; mim element:"+stack.min());
System.out.println("top element:"+stack.pop()+"; mim element:"+stack.min());
System.out.println("top element:"+stack.pop()+"; mim element:"+stack.min());
}
}
2、用2个栈模拟队列操作
public class Stack2Queue<E>
{
private Stack<E> s1 = new Stack<>();
private Stack<E> s2 = new Stack<>();
public synchronized void put(E c){
s1.push(c);
}
public synchronized E pop(){
if(s2.isEmpty()){
while(!s1.isEmpty())
s2.push(s1.pop());
}
if(s2.isEmpty()) return null;
return s2.pop();
}
public synchronized boolean empty(){
return s1.isEmpty()&&s2.isEmpty();
}
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
MyQueue<Integer> q = new MyQueue<Integer>();
q.put(1);
q.put(2);
System.out.print(q.pop());
System.out.print(q.pop());
}
}