环形队列的java实现

tech2026-02-07  2

数组模拟环形队列

分析说明 1.尾索引的下一个为头索引时表示队列满,即将队列容量空出一个作为约定,这个在做判断队列满的时候需要注意 (rear + 1) % maxSize == front 满 2.rear == front 空环形队列数组的实现 /** * @author zl * @create 2020--09--03--9:02 */ public class CicleArrayQueueDemo { public static void main(String[] args) { CicleArrayQueue cicleArrayQueue = new CicleArrayQueue(3); cicleArrayQueue.addQueue(1); cicleArrayQueue.addQueue(2); cicleArrayQueue.addQueue(3); cicleArrayQueue.showQueue(); System.out.println("出队列的值为:"+cicleArrayQueue.getQueue()); System.out.println("出队列后的值"); cicleArrayQueue.showQueue(); } } class CicleArrayQueue { private int maxSize; private int front; private int rear; private int[] arr; public CicleArrayQueue(int maxSize) { this.maxSize = maxSize+1; arr = new int[maxSize + 1]; } //判断队列是否满 public boolean isFull() { return (rear + 1) % maxSize == front; } //判断队列是否为空 public boolean isEmpty() { return rear == front; } //添加数据到队列 public void addQueue(int num) { if (isFull()) { System.out.println("队列已满"); return; } arr[rear] = num; rear = (rear + 1) % maxSize; } //获取队列的数据,出队列 public int getQueue() { if (isEmpty()) { System.out.println("队列为空,请先输入队列"); return 0; } int value = arr[front]; front = (front + 1) % maxSize; return value; } //求出当前队列有效数据的个数 public int size() { return (rear + maxSize - front) % maxSize; } //遍历队列 public void showQueue(){ if (isEmpty()) { System.out.println("队列为空,请先输入队列"); return; } for (int i = front; i < front+size(); i++) { System.out.printf("队列为:%d\t",arr[i%maxSize]); } } }
最新回复(0)