循环队列:把存储队列元素的表从逻辑上看成一个环,称为循环队列。当队首front = maxSize - 1后,再前进一个位置就自动到0,这可以利用除法取余运算(%)来实现。
代码:
package com.ArrayQueue;
public class ArrayQueue1 {
public static void main(String[] args) {
ArrayQueue arrayQueue = new ArrayQueue(5);
System.out.println("判空:"+arrayQueue.isEmpty());
System.out.println("执行入队操作···");
arrayQueue.enQueue(1);
arrayQueue.enQueue(2);
arrayQueue.enQueue(3);
arrayQueue.enQueue(4);
System.out.println("输出队中的长度:");
System.out.println(arrayQueue.getSize());
System.out.println("队中元素为:");
arrayQueue.getAll();
System.out.println("执行出队操作···");
arrayQueue.deQueue();
System.out.println("队中元素为:");
arrayQueue.getAll();
System.out.println("输出队中的长度:");
System.out.println(arrayQueue.getSize());
}
public static class ArrayQueue{
private int front; //队头
private int rear; //队尾
private int maxSize = 5; //最大容量
private int size; //当前队列长度
private int arr[]; //模拟队列的数组
//初始化
public ArrayQueue(int maxSize){
this.maxSize = maxSize;
arr = new int[maxSize];
front = 0;
rear = 0;
size = 0;
}
//判断队空
public boolean isEmpty(){
return front == rear;
}
//判断队满
public boolean isFull(){
return (rear+1) % maxSize == front;
}
//入队
public void enQueue(int n){
if(isFull()){
throw new RuntimeException("队满,不能进行入队操作···");
}
size++;
arr[rear] = n;
rear = (rear+1)%maxSize;
}
//出队
public int deQueue(){
if(isEmpty()){
throw new RuntimeException("队空,不能进行出队操作···");
}
size--;
int m = arr[front];
front = (front + 1) % maxSize;
return m;
}
//显示队列中的元素
public void getAll(){
if(isEmpty()){
throw new RuntimeException("队列为空····");
}
for(int i = front; i < rear;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
//显示队的长度
public int getSize(){
return size;
}
}
}
运行结果如下