使用数组实现环形队列
class CircleQueue{
private int maxSize;
private int front;//0
private int rear;//0
private int arr[];
public CircleQueue(int maxSize) {
this.maxSize = maxSize+1;//因为空出来一个,所以环形队列容量比maxSize少一个
arr = new int[maxSize+1];
}
public boolean isEmpty() {
return rear == front;
}
public boolean isFull() {
return (rear +1 )%maxSize == front;
}
public void add(int num) {
if(isFull()) {
System.out.println("full");
return;
}
arr[rear] = num;//从后往前加
rear = (rear + 1) % maxSize;//后指针后移一位
}
public int get() {
if(isEmpty()) {
throw new RuntimeException("empty");
}
int value = front;
front = (front + 1) % maxSize;
return arr[value];//从前边取
}
public int validNum() {
return (rear + maxSize - front) % maxSize;//有效值的个数
}
public void showValue() {
if(isEmpty()) {
System.out.println("empty");
return;
}
for(int i=front; i < (validNum() + front); i++) {
System.out.println(arr[i % maxSize]+" ");
}
}
}
public class Test {
public static void main(String[] args) {
CircleQueue circleQueue = new CircleQueue(5);
circleQueue.add(1);
circleQueue.add(2);
circleQueue.add(2);
circleQueue.add(2);
circleQueue.add(3);
circleQueue.get();
circleQueue.get();
circleQueue.get();
circleQueue.get();
circleQueue.get();
circleQueue.add(0);
circleQueue.add(0);
circleQueue.showValue();
}
}