循环队列的创建和使用
package com.company;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Array aa=new Array();
aa.queue(5);
aa.addQueue(5);
aa.addQueue(52);
aa.addQueue(62);
aa.addQueue(5);
aa.getQueue();
System.out.println(aa.size());
aa.showQueue();
}
}
class Array{
int front;
int rear;
int maxsize;
int[] arr;
public void queue(int maxsize){
this.maxsize=maxsize;
arr=new int[maxsize];
//rear=0;
//front=0;默认初始值为0
}
//判断队列是否为空
public boolean isEmpty(){
return rear==front;
}
//判断队列是否为满
public boolean isFull(){
return (rear+1)%maxsize==front;
}
//添加数据到队列,front不变,rear向后移动
public void addQueue(int n){//n是加入的数据
if(isFull()){
System.out.println("队列已满");
}else{
arr[rear]=n;//直接将数据加入
rear=(rear+1)%maxsize;//将rear像后移动,这里必须取模(循环移动
}
}
//取出队列中的数据,出队列
public int getQueue(){
if(isEmpty()){
throw new RuntimeException("队列为空");//这个是有返回值的
}else{
int i=arr[front];//先把数据取出来
front=(front+1)%maxsize;//在将front像后移动,这里必须取模(循环移动
return i;
}
}
//要计算队列有效数据的长度
public int size(){
return (rear-front+maxsize)%maxsize;
}
//显示队列的头元素
public int headQueue(){
if(isEmpty()){
throw new RuntimeException("队列为空");
}else{
return arr[front];
}
}
//显示队列的所有数据
public void showQueue(){
//遍历
if(isEmpty()){
System.out.println("队列为空");
}else{
//从front开始遍历到rear处//要计算队列有效数据的长度
for(int i=0;i<((rear-front+maxsize)%maxsize);i++){
System.out.printf("arr[%d]=%d\n",(front+i)%maxsize,arr[(front+i)%maxsize]);
}
}
}
}