数组模拟环形队列
分析说明 1.尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,这个在做判断队列满的时候需要注意 (rear + 1) % maxSize == front 满 2.rear == front 空环形队列数组的实现
public class CicleArrayQueueDemo {
public static void main(String
[] args
) {
CicleArrayQueue cicleArrayQueue
= new CicleArrayQueue(3);
cicleArrayQueue
.addQueue(1);
cicleArrayQueue
.addQueue(2);
cicleArrayQueue
.addQueue(3);
cicleArrayQueue
.showQueue();
System
.out
.println("出队列的值为:"+cicleArrayQueue
.getQueue());
System
.out
.println("出队列后的值");
cicleArrayQueue
.showQueue();
}
}
class CicleArrayQueue {
private int maxSize
;
private int front
;
private int rear
;
private int[] arr
;
public CicleArrayQueue(int maxSize
) {
this.maxSize
= maxSize
+1;
arr
= new int[maxSize
+ 1];
}
public boolean isFull() {
return (rear
+ 1) % maxSize
== front
;
}
public boolean isEmpty() {
return rear
== front
;
}
public void addQueue(int num
) {
if (isFull()) {
System
.out
.println("队列已满");
return;
}
arr
[rear
] = num
;
rear
= (rear
+ 1) % maxSize
;
}
public int getQueue() {
if (isEmpty()) {
System
.out
.println("队列为空,请先输入队列");
return 0;
}
int value
= arr
[front
];
front
= (front
+ 1) % maxSize
;
return value
;
}
public int size() {
return (rear
+ maxSize
- front
) % maxSize
;
}
public void showQueue(){
if (isEmpty()) {
System
.out
.println("队列为空,请先输入队列");
return;
}
for (int i
= front
; i
< front
+size(); i
++) {
System
.out
.printf("队列为:%d\t",arr
[i
%maxSize
]);
}
}
}