队列
含义:队列是一个有序列表,可以用数组或链表来实现
特点:先进先出,队列中添加和删除数据的操作分别是在两端进行的
数组模拟队列
1.maxSize是队列最大容量;front+1指向队列最前面的元素,创建初始值为-1,随输出而增加;rear指向队列最后的元素,创建初始值为-1,随输入而增加;
2.front==rear,队列为空;rear==maxSize-1,队列已满
3.缺陷:数组不能复用
数组模拟环形队列
1.maxSize是队列最大容量,maxSize - 1是队列最大可容纳元素数量
2.front指向队列第一个元素,创建初始值为 0;rear 指向队列最后一个元素的后一个位置,创建初始值为 0,空出一个空间做约定
3.rear == front,队列为空;(rear + 1) % maxSize == front,队列已满;(rear + maxSize - front) % maxSize,获取队列中有效元素的个数
代码实现
public class CircleArrayQueue {//数组模拟环形队列
private int maxSize;//表示数组的最大容量
private int front;//队列头
private int rear;//队列尾
private int[] array;//该数组用于存放数据,模拟队列
public CircleArrayQueue(int maxSize) {//创建队列的构造器
this.maxSize = maxSize;
array = new int[maxSize];
front = 0;//front指向队列第一个元素,创建初始值为0
rear = 0;//rear指向队列最后一个元素的后一个位置,创建初始值为0,空出一个空间做约定
}
public boolean isFull() {//判断队列是否满
return (rear + 1) % maxSize == front;
}
public boolean isEmpty() {//判断队列是否为空
return rear == front;
}
public void addQueue(int n) {//添加数据到队列
if (isFull()) {
return;
}
array[rear] = n;
rear = (rear + 1) % maxSize;//rear后移一位
}
public int getQueue() {//获取队列的数据,出队列
if (isEmpty()) {
throw new RuntimeException("队列为空");
}
int value = array[front];
front = (front + 1) % maxSize;//front后移一位
return value;
}
public void showQueue() {//显示队列的所有数据,注意不是取出数据
if (isEmpty()) {
return;
}
//(rear + maxSize - front) % maxSize队列中有效数据元素的个数
for (int i = front; i < front + (rear + maxSize - front) % maxSize; i++) {
System.out.println(array[i % maxSize]);//[i % maxSize]使i可以循环打印
}
}
public int headQueue() {//显示队列的头数据,注意不是取出数据
if (isEmpty()) {
throw new RuntimeException("队列为空");
}
return array[front];
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战