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 Exception 24 { 25 if(s1.isFull()) 26 throw new Exception("Overflow."); 27 else 28 s1.push(k); 29 } 30 31 //时间复杂度: O(n) 32 public int DeQueue() throws Exception 33 { 34 if(s1.isEmpty()) 35 throw new Exception("Underflow."); 36 else 37 { 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 Stack 49 { 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 Exception 70 { 71 /*if(this.isFull()) 72 throw new Exception("Overflow.");*/ 73 //else 74 this.a[++top] = k; 75 } 76 77 public int pop() throws Exception 78 { 79 /*if(this.isEmpty()) 80 throw new Exception("Underflow.");*/ 81 //else 82 return this.a[top--]; 83 } 84 85 public int getLength() 86 { 87 return this.top + 1; 88 } 89 }