设s1为入队栈,s2为出队栈。
入队时,对s1入栈即可。
出队时,要考虑两种情况:
1. 栈s2不为空,则直接弹出s2数据;
2. 栈s2为空,则依次弹出s1数据,放进s2中,再弹出s2数据。
import java.util.Stack;
//用连个栈模拟队列操作
public class myQueue1<E> {
private Stack<E> s1=new Stack<E>();//入队
private Stack<E> s2=new Stack<E>();//出队
//put()
public synchronized void put(E data) {
s1.push(data);
}
//pop()
public synchronized E pop() {
if(s2.isEmpty()) {
return s2.pop();
}else {
while(!s1.isEmpty()) {
s2.push(s1.pop());
}
return s2.pop();
}
}
//isempty()
public synchronized boolean isEmpty() {
return s1.isEmpty()&&s2.isEmpty();
}
}