如何只使用stack实现queue呢?由于stack是现进后出(FILO),而queue是先进先出的(FIFO)。也就是说stack进行了一次反向,进行两次反向就能实现queue的功能,所以可以用两个stack实现queue。
假设两个栈inStack和outStack,且都为空。可以认为onStack提供入队的功能,栈outStack提供出队的功能。下面是入队和出队的具体算法:
(1)如果栈outStack不为空,直接弹出栈outStack顶部的数据;
(2)如果栈outStack为空,则依次弹出栈inStack的数据,放入栈outStack中,再弹出栈outStack顶部的数据;
实现的代码:
/**
* 使用两个栈来模拟队列
*
* @param <T>
*
*/
public class SimulationQueue<T> {
private Stack<T> inStack;
private Stack<T> outStack;
public SimulationQueue() {
inStack = new Stack<T>();
outStack = new Stack<T>();
}
/**