基本思想:一个队列用于存储所有元素,另一个空闲,入队元素进入存储队列,出队时将存储队列的元素依次放入空闲队列,剩下最后一个时弹出,然后交换指针用于下次入栈及出栈。
public class Stack<T> {
private Queue<T> storeQueue;
private Queue<T> emptyQueue;
public void push(T t) {
if (storeQueue == null) {
storeQueue = new Queue();
}
storeQueue.add(t);
}
public T pop() {
if (emptyQueue == null) {
emptyQueue = new Queue();
}
while (storeQueue.size() > 1) {
emptyQueue.add(storeQueue.remove());
}
T t = storeQueue.remove();
//没有写renmoveAll方法只能通过遍历进行引用的交换
while (emptyQueue.size() > 0) {
storeQueue.add(emptyQueue.remove());
}
return t;
}
public int size() {
return storeQueue == null ? 0 : storeQueue.size();
}
}
简单的实现了几个方法,没有考虑线程安全等问题。