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     }

 

 

 

 

posted @ 2022-05-08 10:57  yzmarcus  阅读(18)  评论(0编辑  收藏  举报