1 package com.aixuexi.contact;
2
3 public class CirArrQunue {
4 public static void main(String[] args) {
5 /*
6 * 2019/7/15 15点58分
7 * 2个问题 几个算法公式
8 *
9 *
10 * (rear + 1) % maxSize == front 判断队列是否满
11 * rear = 4 屁股
12 * front = 0 头
13 * maxSize = 5 最大数
14 * (4 + 1) % 5 = 0
15 *
16 *
17 * rear == front
18 * 默认 都为0
19 *
20 *
21 * (rear + 1) % maxSize
22 * 添加元素 尾指针+1
23 * 默认 rear = 0
24 * maxSize = 5 最大数
25 * rear = (rear + 1) % 5
26 *
27 *
28 * (front + 1) % maxSize
29 * front = (front + 1) % maxSize; //将 front 后移, 考虑取模
30 * 默认front = 0 头
31 * front = (0 + 1) % 5 front == 1
32 *
33 *
34 * (rear + maxSize - front) % maxSize 算个数
35 * rear = 3
36 * maxSize = 5
37 * front = 0 没弹出数据
38 * value = (3 + 5 - 0)%5 valiue == 3
39 *
40 *
41 * 显示队列
42 * for(int i = front; i <front + Size(); i++) { //front + Size() 去掉为什么不行
43 *
44 * 42行 75 行
45 */
46
47 CircleArray queue = new CircleArray(5); //队列有四个元素
48
49 System.out.println(queue.isFull());
50 System.out.println(queue.isEmpty());
51
52 System.out.println(queue.addQueue(7));
53 System.out.println(queue.addQueue(8));
54 System.out.println(queue.addQueue(1));
55 System.out.println(queue.addQueue(9));
56 queue.Arrshow();
57
58 System.out.println(queue.getQueue());
59 queue.Arrshow();
60
61 System.out.println(queue.getQueue());
62 queue.Arrshow();
63 //System.out.println(queue.headQunue());
64
65 }
66 }
67
68 class CircleArray{
69
70 private int maxSize;
71 private int front;
72 private int rear;
73 private int[] arr;
74 //设置队列有多少个元素
75 public CircleArray(int arrmaxSize) {
76 // 注意: 不要重复定义了 int maxSize 不对 会重新产生变量
77 maxSize = arrmaxSize;
78 arr = new int[maxSize];
79 }
80
81 //判断队列是否满
82 public boolean isFull() {
83 return (rear + 1) % maxSize == front;
84 }
85 //判断队列是否空
86 public boolean isEmpty() {
87 return rear == front;
88 }
89 //添加元素
90 public int addQueue(int n) {
91 if(isFull()) {
92 return -1;
93 }
94 arr[rear] = n;
95 rear = (rear + 1) % maxSize;//
96 return 1;
97 }
98 //弹出队列的第一个元素
99 public int getQueue() {
100 if(isEmpty()) {
101 return -1;
102 } else {
103 int value = arr[front];
104 front = (front + 1) % maxSize; //将 front 后移, 考虑取模
105 return value;
106 }
107 }
108 //显示队列
109 public void Arrshow() {
110 for(int i = front; i <front + Size(); i++) { //front + Size() 去掉为什么不行
111 System.out.printf("arr[%d]=%d\n", i % maxSize, arr[i % maxSize]);
112 }
113 }
114 //大小 队列
115 public int Size() {
116 return (rear + maxSize - front) % maxSize;//
117 }
118 //返回队列头的数值
119 public int headQunue() {
120 if(isEmpty()) {
121 return -1;
122 }
123 return arr[front];
124 }
125 }