代码实现:
package 数据结构; /** * Created with IntelliJ IDEA. * * @Auther: 风离 * @Date: 2020/10/20/16:13 * @Description: */ public class 自己的环形队列 { public static void main(String[] args) { CircleArr c1=new CircleArr(10); //添加9个元素,10个容量因为留了一个容量作为“约定”,所以最大只能存9个元素 for(int i=0;i<9;i++) { c1.addQueue(10); System.out.println("-----------------------------------"); System.out.println("头指针指向:"+c1.getFront()); System.out.println("尾指针指向"+c1.getRear()); } System.out.println(); c1.showQueue(); System.out.println(); System.out.print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(); //取出8个元素,还剩一个元素 for(int i=0;i<8;i++) { c1.getQueue(); System.out.println("-----------------------------------"); System.out.println("头指针指向:"+c1.getFront()); System.out.println("尾指针指向:"+c1.getRear()); } System.out.println(); c1.showQueue(); System.out.println(); System.out.print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(); //加一个元素 c1.addQueue(20); System.out.println(); c1.showQueue(); System.out.println(); System.out.println("头指针指向:"+c1.getFront()); System.out.println("尾指针指向:"+c1.getRear()); System.out.println(); //减一个元素 c1.getQueue(); System.out.println("头指针指向:"+c1.getFront()); System.out.println("尾指针指向:"+c1.getRear()); //再减一个元素 c1.getQueue(); System.out.println("头指针指向:"+c1.getFront()); System.out.println("尾指针指向:"+c1.getRear()); //在减少则报异常 c1.getQueue(); System.out.println("头指针指向:"+c1.getFront()); System.out.println("尾指针指向:"+c1.getRear()); } } class CircleArr{ /** * maxsize:数组最大容量 * front:队列头指针 :指向队列头的第一个元素 * rear:队列尾指针 :指向队列尾的元素的后一个位置 * arr:队列数组 */ private int maxsize; private int front; private int rear; private int []arr; //getter and setter public int getMaxsize() { return maxsize; } public void setMaxsize(int maxsize) { this.maxsize = maxsize; } public int getFront() { return front; } public void setFront(int front) { this.front = front; } public int getRear() { return rear; } public void setRear(int rear) { this.rear = rear; } public int[] getArr() { return arr; } public void setArr(int[] arr) { this.arr = arr; } //构造方法 public CircleArr(int maxsize) { this.maxsize = maxsize; arr=new int[maxsize]; front=0; rear=0; } //判断队列是否满 public boolean isFull(){ return (rear+1)%maxsize==front; } //判断队列是否为空 public boolean isEmpty() { return rear==front; } public void addQueue(int n) { if(isFull()) { System.out.println("队列已满,不能添加数据"); } else{ arr[rear]=n; rear=(rear+1)%maxsize; } } public int getQueue(){ if(isEmpty()) { //会直接导致return throw new RuntimeException("队列中无数据,取出失败"); } else{ int value=arr[front]; front=(front+1)%maxsize; return value; } } public void showQueue(){ if(isEmpty()) { System.out.println("队列为空,没有数据"); } else{ for(int i=front;i<front+size();i++) { System.out.print(arr[i%maxsize]+"\t"); } } } /** * 求出当前队列中有效的元素个数 */ public int size() { return (rear+maxsize-front)%maxsize; } }