package alo;
import java.util.Scanner;
public class 环形队列_CircleArray {
private int front;
private int rear;
private final int maxsize;
private int[] arr;
public 环形队列_CircleArray(int arrMaxSize){
this.maxsize=arrMaxSize;
arr=new int[arrMaxSize];
this.front=0; //属性没有赋值默认为0。属性有默认值,变量没有
this.rear=0;
}
private boolean arrIsFull(){
return (this.rear+2)%this.maxsize==this.front;
}
private int arrValidNum(){
return (this.rear-this.front+this.maxsize)%this.maxsize; //假装最后一个没有,取模,保证是正数
}
private boolean arrIsEmpty(){
return this.rear==this.front;
}
public void get(int index){
System.out.println(arr[index%maxsize]);
}
public void popArr(){
if(arrIsEmpty()){
System.out.println("空");
}
front++;
}
public void addNum(int value){
if(arrIsFull()){ //满有就不能添加
System.out.println("队列满");
}else{
arr[this.rear]=value;
this.rear=(this.rear+1)%this.maxsize; //模,让数永远不超过那个值,循环
}
}
public void showArr(){
if(arrIsEmpty()){
System.out.println("空");
}
for(int a=front;a<front+arrValidNum();a++){
System.out.printf("arr[%d]=%d ",a%maxsize,arr[a%maxsize]); //a可能会超出索引界,取模把他整回来
}
}
public int arrHead(){
return arr[front];
}
public static void main(String[] args){
环形队列_CircleArray arr=new 环形队列_CircleArray(5);
boolean judge=true;
Scanner input=new Scanner(System.in);
while (judge){
switch (input.next()) {
case "add" -> arr.addNum(input.nextInt());
case "show" -> arr.showArr();
case "exit" -> judge = false;
case "head" -> System.out.println(arr.arrHead());
case "pop" -> arr.popArr();
case "get" -> arr.get(input.nextInt());
}
}
}
}
数组模拟环形队列简单代码实现
最新推荐文章于 2024-10-16 16:34:42 发布