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 }