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条)