队列的应用场景
银行叫号系统
介绍
1>队列是一个有序列表,可以用数组和链表实现
2>遵循先入先出原则
3>图示如下
数组模拟队列的思路分析
声明如上图,maxSize为最大容量
存入队列称为addQueue,有两个步骤
1>尾指针后移动rear+1,当rear=front为空
2>若rear小于maxSize-1,则无法存入,队满
代码实现
//创建数组模拟队列编写一个类
class ArrayQueue{
private int maxSize;//最大容量
private int front;//头
private int rear;//尾
private int[] arr;//用于存放数据,模拟队列
//创建队列的构造器
public ArrayQueue(int arrMaxSize) {
maxSize = arrMaxSize;
arr = new int [maxSize];
front = -1;
//指向头部,不包含
rear = -1;
//指向尾部,包含
}
//判断是否满
public boolean isFull() {
return rear == maxSize-1;
}
//判断是否为空
public boolean isEmpty() {
return rear == front;
}
//添加数据到队列
public void addQueue(int n) {
//判断是否满
if(isFull()) {
System.out.println("满");
return;
}
rear++;//rear后移
arr[rear] = n;
}
//获取数据,出队列
public int getQueue() {
//判断是否为空
if(isEmpty()) {
//抛出异常,终止
throw new RuntimeException("队列空");
}
front++;
return arr[front];
}
//显示队列所有数据
public void showQueue() {
//遍历
if(isEmpty()) {
System.out.println("空");
}
for(int i=0;i<arr.length;i++) {
System.out.printf("arr[%d]=%dn",i,arr[i]);
}
}
}
问题分析及优化
- 没有实现复用
- 将这个数组用算法改进成一个环形数组
南故笙烟:数组模拟环形队列及代码改进zhuanlan.zhihu.com