栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【算法-环形队列】通过一维数组实现原理和代码思路(java语言实现)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【算法-环形队列】通过一维数组实现原理和代码思路(java语言实现)

注意点:

队列的特点:

先进先出,队列的输出、输入是通过数组的前后端进行操作,即队列的输入从数组的尾部进入,队列的输出从数组的头部输出

代码实现需要声明的属性:

front:头指针,本章操作环形队列的思路:front指向队列的头结点,也就是说arr[front]为队列的第一个元素

rear:尾指针,本章操作环形队列的思路,rear指向队列尾结点的后一位,并将数组的最后一位空出,作为约定

maxSize:数组的最大容量

arr[]:声明一个数组用来存放队列

代码实现:

1、通过构造器初始化声明:front/rear/maxSize

private CircleQueue(int size){
maxSize = size;
front= 0;//初始化声明头结点和尾结点相同,皆为0
rear = 0;
}

2、判断队列是否为空(思路:头指针和尾指针相同的情况下,为空)

public boolean isEmpty(){
return rear == front;
}

3、判断队列是否已满(思路:通过“取模“”来实现判断:(rear+1)%maxSize == front

public boolean isFull(){
return (rear+1)%maxSize == front
}

4、得到队列中的总元素(注意点:需要注意队列是否为空)

public int getSize(){
//首先判断队列是否为空
if(isEmpty){
//为空则直接抛出异常
throw new RuntimeException("队列为空!")    
}
//否则获得队列总个数
return (rear+maxSize-front)%maxSize;
//这里可以这么理解  (当前个数+总容量) %总容量 从而得到当前个数

}

4、开始往队列里面添加元素(注意点:首先要判断队列是否已满,添加元素后,rear指针需要后移)

public void addQueue(int num){
//判断队列是否已满
if(isFull){
System.out.println("队列已满,无法添加元素");
return;
}
//否则往队列中加入元素
arr[rear] = num;//数组元素赋值
rear = (rear+1)%maxSize //此时rear指针后移一位

}

5、查看队列(注意点:需要判断队列是否为空)

public void show(){
//判断队列是否为空
if(isEmpty){
throw new RuntimeException("队列为空");
}
//否则遍历队列
for(int i = front,i 

6、显式队列的头部数据

public int headQueue(){
if(isEmpty){
System.out.print("队列为空");
}

//查看头部元素

return arr[front];
}

7、出队列操作(注意点:判断队列是否为空,front指针在取出数据后需要移动)

public void outQueue(){
  //判断队列是否为空
....此处省略

//出队列从队列头部出,指针front变化
 int temp = arr[front];
front = (front+1)%maxSize;//front指针移动
System.out.prinf("取出的数据是:%d"+temp);
}

完成以上操作,即可完成队列的添加,取出和查看操作

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/425656.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号