两个队列,inputQueue和outputQueue。其中inputQueue用于入栈操作时存放元素,outputQueue用于辅助出栈操作。
例如,入栈元素01234,在inputQueue中存放01234,出栈时,将0123转移到outputQueue,此时inputQueue只剩元素4,4出栈后,将outputQueue中的0123在转移到inputQueue中。
public class StackByTwoQueues<T> {
/**
* inputQueue:入栈所用队列,outputQueue:出栈用于转移先入栈的元素
*/
private static Queue inputQueue = new Queue();
private static Queue outputQueue = new Queue();
/**
* 入栈操作
* @param item 入栈元素
* @return 返回入栈的元素
*/
private static int push(int item){
return inputQueue.offer(item);
}
/**
* 栈顶元素出栈操作
* @return 返回栈顶元素
*/
private static int pop(){
//栈中没有元素,抛出异常
if (inputQueue.size() == 0){
throw new IndexOutOfBoundsException("stack is empty");
}
//除了最后入栈的元素,将其他元素转