
package com.线性表;
public class CircularQueue {
//表示数组的最大容量
private int maxSize;
//队头
private int frontPoint;
//队尾
private int rearPoint;
//该数组用于存放数据
private int[] array;
public CircularQueue(int maxSize) {
this.maxSize = maxSize;
array=new int[maxSize];
// 指向队列的头部,队头元素
frontPoint=0;
//指向队列的尾部,分析得知,指向队列中最后一个元素的最后一个位置
rearPoint=0;
}
//判断队列是否已满
public boolean isFull(){
return (rearPoint+1)%maxSize==frontPoint;
}
//判断队列是否为空队列
public boolean isEmpty(){
//指向头部的指针和指向尾部的指针,重合,说明队列是空队列
return frontPoint==rearPoint;
}
//添加数据到队列中
public void addQueue(int data){
if(isFull()){
System.out.println("该队列已满,无法再添加数据");
return;
}
array[rearPoint]=data;
//rearPoint++;
//优化----1%10=1
rearPoint=(rearPoint+1)%maxSize;
}
//删除数据,也就是出队列,获取该队列元素并且删除
public int get(){
if(isEmpty()){
System.out.println("该队列是一个空队列,没有数据可删除");
return -1;
}
//删除是从队头删除
//return array[frontPoint++];
//优化
int value=array[frontPoint];
frontPoint=(frontPoint+1)%maxSize;
return value;
}
//查看队列中的元素
public void find(){
if (isEmpty()){
System.out.println("队列为空,无数据");
}
for (int i = frontPoint; i < frontPoint+size(); i++) {
System.out.print("队列的数据有:"+array[i%maxSize]+" ");
}
}
//查看队列中首数据【队头元素】
public int findFrist(){
if (isEmpty()){
System.out.println("队列为空,无数据");
}
return array[frontPoint];
}
//查看队尾的数据
public int findLast(){
if (isEmpty()){
System.out.println("队列为空,无数据");
}
return array[rearPoint-1];
}
//获取当前队列中有效数据的个数
public int size(){
return (rearPoint+maxSize-frontPoint)%maxSize;
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)