实现思路
创新互联公司是一家专注于成都网站设计、成都网站建设与策划设计,平安网站建设哪家好?创新互联公司做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:平安等地区。平安做网站价格咨询:18980820575
1,调整front指向队列的第一个元素,front初始值=0
2,调整rear指向队列的最后一个元素的后一个位置,希望空出一个空间作为约定,rear的初始值=0
3,队满,条件: (rear+1) % maxSize = front ,则队满,队列最多可存 maxSize-1个数
4,队空,条件:rear == front空
5,队列中有效的数据的个数 (rear-front+maxSize) % maxSize
代码实现
package com.datastack.datastack.queue; import java.util.Scanner; /* * 环形队列(数组实现) */ public class CircleQueue { private int maxSize;//队列最大值 private int front;//队首,指向队列首的前一个位置 private int rear;//队尾,指向队列尾的序号 private int[] arr;//存放队列数据的数组 /** * 创建队列 * @param maxSize */ public CircleQueue(int maxSize){ this.maxSize = maxSize; this.arr = new int[maxSize]; this.front = 0; this.rear = 0; } /** * 判断队列是否已满 * @return */ public boolean isFull(){ return (rear+1) % maxSize == front; } /** * 判断队列是否为空 * @param args */ public boolean isEmpty(){ return rear == front; } /** * 添加数据到队列 * @param args */ public void addQueue(int n){ //判断队列是否满 if(isFull()){ System.out.println("队列已满,不能加入数据。"); return; } //直接将数据加入 arr[rear] = n; //将rear后移,需考虑取模 rear = (rear+1) % maxSize; } /** * 出队列 * @param args */ public int getQueue(){ //判断队列是否为空 if(isEmpty()){ //通过抛出异常 throw new RuntimeException("队列空,不能取数据"); } //需要分析front是指向队列的第一个元素 //1,先把front的值保存到变量 //2,将front后移,去摸 int res = this.arr[front]; front = (front+1) % maxSize; return res; } /** * 显示队列数据 * @param args */ public void showQueque(){ if(isEmpty()){ System.out.println("队列为空。"); return; } //从front开始遍历 for(int i=front;i
分享文章:05-环形队列
文章URL:http://www.cdkjz.cn/article/jicegg.html