import java.util.Scanner;
public class 数组实现环形队列 {
public static void main(String[] args) {
ArrayQueue arrayQueue = new ArrayQueue(3);
char key = ' ';
Scanner in = new Scanner(System.in);
boolean loop = true;
System.out.println("s:显示队列");
System.out.println("a:添加数据");
System.out.println("g:取出数据");
System.out.println("t:得到数据个数");
System.out.println("e:退出");
while(loop){
key = in.next().charAt(0);
switch (key){
case 's':
arrayQueue.showArr();
break;
case 'a':
System.out.println("输入一个数");
int n = in.nextInt();
arrayQueue.add(n);
break;
case 'g':
try {
int res = arrayQueue.get();
System.out.println("取出:" + res);
}catch (Exception e){
System.out.println(e);
}
break;
case 't':
System.out.println("数据个数" + arrayQueue.total());
break;
case 'e':
loop = false;
break;
}
}
System.out.println("结束");
}
}
class ArrayQueue{
private int maxSize;
private int front;
private int rare;
private int [] arr;
public ArrayQueue(int arrMaxSize){
maxSize = arrMaxSize;
arr = new int[maxSize];
front = 0;
rare = 0;
}
public boolean isFull(){
return (rare + 1) % maxSize == front;
}
public boolean isEmpty(){
return rare == front;
}
public void add(int n){
if (isFull()){
System.out.println("队列满,无法添加");
return;
}
arr[rare] = n;
rare = (rare + 1) % maxSize;
}
public int get(){
if (isEmpty()){
throw new RuntimeException("队列空,无法取出");
}
int value = arr[front];
front = (front + 1) % maxSize;
return value;
}
public void showArr(){
if (isEmpty()){
System.out.println("无数据");
return;
}
for (int i = front; i < rare; i++) {
System.out.println(arr[i]);
}
}
public int total(){
return (rare + maxSize - front) % maxSize;
}
}