8.3:数组实现队列(难)
8.3:数组实现队列(难)
用size解耦 pushi和polli
1 //数组实现队列,先进先出
2 //通过size解耦end和begin
3 public static class MyQueue {
4 private int[] arr;
5 private int end; // pushi 进来的数放哪?
6 private int begin; // polli 弹出的数在哪拿?
7 private int size;
8 private final int limit;
9
10 public MyQueue(int limit) {
11 arr = new int[limit];
12 end = 0;
13 begin = 0;
14 size = 0;
15 this.limit = limit;
16 }
17
18 public void push(int value) {
19 if (size == limit) {
20 throw new RuntimeException("队列满了,不能再加了");
21 }
22 size++;
23 arr[end] = value;
24 end = nextIndex(end);
25 }
26
27 public int pop() {
28 if (size == 0) {
29 throw new RuntimeException("队列空了,不能再拿了");
30 }
31 size--;
32 int ans = arr[begin];
33 begin = nextIndex(begin);
34 return ans;
35 }
36
37 public boolean isEmpty() {
38 return size == 0;
39 }
40
41 // 如果现在的下标是i,返回下一个位置
42 private int nextIndex(int i) {
43 //没到最后就加1,到了最后就变成0
44 return i < limit - 1 ? i + 1 : 0;
45 }
46
47 }