package com.github.wdn.coding2017.basic.stack; import com.github.wdn.coding2017.basic.Queue; /** * Created by Administrator on 2017/5/6 0006. */ public class StackWithTwoQueues<E> { Queue queue1 = new Queue(); Queue queue2 = new Queue(); public static void main(String[] args) { StackWithTwoQueues<Integer> stack = new StackWithTwoQueues<>(); for (int i = 0; i < 5; i++) { stack.push(i); } for (int i = 0; i < 3; i++) { System.out.println(stack.pop()); } System.out.println(""); for (int i = 0; i < 5; i++) { stack.push(i); } while (!stack.isEmpty()) { System.out.println(stack.pop()); } } public void push(E data){ if(queue1.isEmpty()){ queue2.enQueue(data); }else{ queue1.enQueue(data); } } public E pop(){ if(isEmpty()){ throw new RuntimeException("stack is empty"); } if(queue1.isEmpty()){ int len = queue2.size(); for (int i = 0; i < len-1; i++) { queue1.enQueue(queue2.deQueue()); } return (E)queue2.deQueue(); }else{ int len = queue1.size(); for (int i = 0; i < len-1; i++) { queue2.enQueue(queue1.deQueue()); } return (E)queue1.deQueue(); } } public boolean isEmpty(){ return queue1.isEmpty() && queue2.isEmpty(); } }