package basic.dataStructure.stack;
import basic.dataStructure.queue.Queue;
/**
* 用两个队列实现一个栈
*/
public class StackWithTwoQueues {
Queue queue1 = null;
Queue queue2 = null;
private int data = -1;
public StackWithTwoQueues(){
queue1 = new Queue();
queue2 = new Queue();
}
public void push(int data) {
queue1.enQueue(data);
}
public int pop() {
move();
return this.data;
}
/**
* queue1是数据保存队列, queue2是缓存队列
* 每次取之前将queue1的n-1个数据移动至queue2
* 取出queue的最后一个数据即可
*/
private void move(){
if(queue2.isNotEmpty()){
throw new RuntimeException("queue2 is not empty, operation aborted");
}
int size = queue1.size();
for(int i = 0; i < size - 1; i++){
queue2.enQueue(queue1.deQueue());
}
data = (Integer)queue1.deQueue();
for(int i = 0; i < size - 1; i++){
queue1.enQueue(queue2.deQueue());
}
}
}