package week09.basic; import java.util.EmptyStackException; /** * 用两个队列实现栈 * * @author gallenzhang * */ public class StackWithTwoQueues { private Queue<Integer> firstQueue = new Queue<>(); private Queue<Integer> secondQueue = new Queue<>(); public void push(int data) { if(!firstQueue.isEmpty()){ firstQueue.enQueue(data); return ; } if(!secondQueue.isEmpty()){ secondQueue.enQueue(data); return ; } firstQueue.enQueue(data); } public int pop() { if(firstQueue.isEmpty() && secondQueue.isEmpty()){ throw new EmptyStackException(); } int item = -1; int queueSize = 0; if(!firstQueue.isEmpty()){ queueSize = firstQueue.size(); for(int i = 0 ; i < queueSize; i++){ if(i == queueSize - 1){ item = firstQueue.deQueue(); return item; } secondQueue.enQueue(firstQueue.deQueue()); } } if(!secondQueue.isEmpty()){ queueSize = secondQueue.size(); for(int i = 0; i < queueSize; i++){ if(i == queueSize -1){ item = secondQueue.deQueue(); return item; } firstQueue.enQueue(secondQueue.deQueue()); } } return item; } public int size(){ return Math.max(firstQueue.size(), secondQueue.size()); } public boolean isEmpty(){ return size() == 0; } public int peek(){ int item = -1; int queueSize = 0; if(firstQueue.isEmpty() && secondQueue.isEmpty()){ throw new EmptyStackException(); } if(!firstQueue.isEmpty()){ queueSize = firstQueue.size(); for(int i = 0; i < queueSize; i++){ if(i == queueSize - 1){ item = firstQueue.deQueue(); break; } firstQueue.enQueue(firstQueue.deQueue()); } firstQueue.enQueue(item); return item; } if(!secondQueue.isEmpty()){ queueSize = secondQueue.size(); for(int i = 0; i < queueSize; i++){ if(i == queueSize - 1){ item = secondQueue.deQueue(); break; } secondQueue.enQueue(secondQueue.deQueue()); } secondQueue.enQueue(item); return item; } return item; } @Override public String toString(){ return firstQueue.isEmpty() ? secondQueue.toString() : firstQueue.toString(); } }