基本思想:一个队列用于存储所有元素,另一个空闲,入队元素进入存储队列,出队时将存储队列的元素依次放入空闲队列,剩下最后一个时弹出,然后交换指针用于下次入栈及出栈。
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();
}
}
简单的实现了几个方法,没有考虑线程安全等问题。
本文介绍了一种使用两个队列实现栈数据结构的方法。基本思路是利用一个队列存储所有元素,另一个队列为空闲状态;入队时直接将元素添加到存储队列中;出队时将存储队列中的元素依次移入空闲队列,直到只剩下一个元素时弹出该元素,随后交换两队列的角色以备下次操作。
1064

被折叠的 条评论
为什么被折叠?



