package com.scholar;
import java.util.Scanner;
/**
-
//@auther huhuho
-
//@date 2022/4/27 9:50
*/
public class CircleArrayQueue {
public static void main(String[] args) {
CircleQueue queue = new CircleQueue(3);
Scanner scanner = new Scanner(System.in);
boolean loop = true;while(loop) { System.out.println("s(show): 显示队列"); System.out.println("e(exit): 退出程序"); System.out.println("a(add): 添加数据到队列"); System.out.println("d(delete): 从队列取出数据"); char key = scanner.next().charAt(0); int res; switch(key) { case 'a': System.out.println("输出一个数"); int value = scanner.nextInt(); queue.add(value); break; case 'e': scanner.close(); loop = false; break; case 'd': try { res = queue.delete(); System.out.printf("取出的数据是%d\n", res); } catch (Exception var8) { System.out.println(var8.getMessage()); } break; case 's': queue.show(); } } System.out.println("程序退出~~");
}
}
class CircleQueue {
int maxsize;
int front;
int rear;
int[] arr;
public CircleQueue(int maxsize) {
this.maxsize=maxsize;
this.front=0;//指当前位置
this.rear=0;//指最后位置的后一个位置
this.arr=new int[this.maxsize];
}
public boolean isEmpty(){
return frontrear;
}
public boolean isFull(){
return (rear+1)%maxsizefront;//有效值为maxsize-1,因为最后一个值存储指针,回到原先的front
}
public void add(int n){
//如果队列满,
if (isFull()){
System.out.println(“队列满,不能添加数据”);
}
else {
//因为当前rear指向后一个位置,所以直接赋值
arr[rear]=n;
//取模运算,进行环行队列
rear=(rear+1)%maxsize;
}}
public int delete(){
//如果队列为空会报异常,需要将异常抛出
if (isEmpty()){
throw new RuntimeException(“队列为空,不能删除数据”);
}else {
//front是当前位置,所以front要先保存到delete,在对front进行加1,并且要判断环行
int delete=arr[front];
front=(front+1)%maxsize;
return delete;
}}
public void show(){
//如果队列为空,输出这句话,将程序结束
if (isEmpty()){
System.out.println(“队列为空”);
return;
}
//不为空,遍历输出,
for (int i = front; i <front+(rear+maxsize-front)%maxsize; i++) {
System.out.printf(“%d\n”,arr[i%maxsize]);
}}
}