/**
* @Author: Lzy
* @Desc: 数组实现环形队列,数组实现的 简单队列有一定的缺陷,仅仅是移动指针,并没有释放数据,会造成内存的浪费
* 环形队列就是解决这个问题出现的,但是判空和判满有一些差别。判空不再是ref==font,判满也不再是font+1==size了
* @Date: 2021/1/16 18:03
*/
public class ArrayQueue2 {
//定义队列长度
private int size;
//定义头指针,头指针现在指向队列的一个元素,初始值为0
private int font;
//定义尾指针 尾指针指向数组最后一个元素的后一位
private int ref;
//定义数组实现队列
private int[] arr;
//初始化队列
public void init(int maxSize) {
size = maxSize;
arr = new int[size];
font = 0;
ref = 0;
}
public Boolean isFull() {
return (ref + 1) % size == font;
}
public Boolean isEmpty() {
return ref == font;
}
public int add(int num) {
if (isFull()) {
throw new RuntimeException("队列已满");
}
arr[ref] = num;
ref = (ref + 1) % size;
System.out.println("当前ref指向" + ref);
return num;
}
public int get() {
if (isEmpty()) {
throw new RuntimeException("队列已空");
}
int value = arr[font];
font = (font + 1) % size;
System.out.println("当前font指向" + font);
return value;
}
public int getQueueSize() {
return (ref - font + size) % size;
}
public void sout() {
int k=getQueueSize();
for (int i = font; i < k+font; i++) {
System.out.println(arr[i % size]);
}
}
环形队列实现
于 2021-01-21 11:46:01 首次发布