前端之家收集整理的这篇文章主要介绍了
队列,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一、需求场景
二、队列特点
三、使用数组模拟队列
1、示意图

2、细节说明
- 需要三个元素来实现队列的模拟:
- maxSize:最大容量,固定不变@H_403_4@
- front:指向队列的第一个元素的前一个位置;初始化时,因为还没有元素,所以指向-1
@H_403_4@
- rear:指向队列的最后一个元素;初始化时,因为还没有元素,所以指向-1
@H_403_4@
@H_403_4@
- 队列空还是满的判断
- front=rear:队列为空@H_403_4@
- rear==maxSize-1:队列为满@H_403_4@
@H_403_4@
- 入列操作思路
- 判断是否满了@H_403_4@
- 未满情况下,rear+1,然后存放数据@H_403_4@
@H_403_4@
- 出列操作思路
- 判断是否为空@H_403_4@
- 非空情况下,取出数据,front-1@H_403_4@
@H_403_4@
-
注意
- 出列要移动指针,显示数据不用移动,入列亦同。@H_403_4@
@H_403_4@
四、实战
1、实现思路
- 万事万物皆对象====>>>编写一个类,来模拟数组队列ArrayQueue。@H_403_4@
- 类的成员
- 属性:刻画出队列的特征,正式因为这些特征,它才是它,而不是别的@H_403_4@
- 构造器:因为并非JavaBean,需要自己根据情况构建。@H_403_4@
- 方法:是够为空,是否为满,添加数据,删除数据,遍历@H_403_4@
@H_403_4@
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; //这里自定义的,但是含义要明白:front指向的是第一个数据的前一个位置
rear = -1; //rear指向的是最后一个数据
}
public boolean isEmpty(){
return front == rear;
}
public boolean isFull(){
return rear == maxSize-1;
}
public void addQueue(int num){
if (isFull()){
System.out.println("队列已满");
return;
}
rear++;
arr[rear] = num;
}
public int deleteQueue(){
if (isEmpty()){
System.out.println("队列为空");
}
front++;
return arr[front];
}
public void showQueue(){
if (isEmpty()){
System.out.println("队列为空");
return;
}
for (int i = 0; i < arr.length; i++) {
System.out.printf("arr[%d]=%d\n",i,arr[i]);
}//这里用foreach就不能得到第几了
}
}
五、优化:循坏队列
1、问题
- 上述队列,只能使用一次@H_403_4@
- 用取模运算实现循环队列,达到复用效果@H_403_4@
2、实现思路