1 class MyQueue 2 { 3 private Stack s1; 4 private Stack s2; 5 6 public MyQueue(int size) 7 { 8 this.s1 = new Stack(size); 9 this.s2 = new Stack(size);10 }11 12 public boolean isFull()13 {14 return s1.isFull();15 }16 17 public boolean isEmpty()18 {19 return s1.isEmpty();20 }21 22 //时间复杂度: O(1)23 public void EnQueue(int k) throws Exception24 {25 if(s1.isFull())26 throw new Exception("Overflow.");27 else28 s1.push(k);29 }30 31 //时间复杂度: O(n)32 public int DeQueue() throws Exception33 {34 if(s1.isEmpty())35 throw new Exception("Underflow.");36 else37 {38 for(int i = this.s1.getLength(); i > 1; i--)39 s2.push(s1.pop());40 int key = s1.pop();41 while(!s2.isEmpty())42 s1.push(s2.pop());43 return key;44 }45 }46 }47 48 class Stack49 {50 private int top;51 private int[] a;52 53 public Stack(int size)54 {55 this.top = -1;56 this.a = new int[size];57 }58 59 public boolean isFull()60 {61 return this.top == this.a.length - 1;62 }63 64 public boolean isEmpty()65 {66 return this.top == -1;67 }68 69 public void push(int k) throws Exception70 {71 /*if(this.isFull())72 throw new Exception("Overflow.");*/73 //else74 this.a[++top] = k;75 }76 77 public int pop() throws Exception78 {79 /*if(this.isEmpty())80 throw new Exception("Underflow.");*/81 //else82 return this.a[top--];83 }84 85 public int getLength()86 {87 return this.top + 1;88 }89 }