一:什么是队列?
1.定义:队列是一个有序列表,可以用数组或是链表来表示。
2.原则:队列遵循先入先出的原则,即:先存入队列的数据,要先取出,后存入的要后取出。
二:数组模拟队列
(1)变量
1.maxSize表示该队列的最大容量
2.front和rear分别记录队列前后端的下标(front随着数据输出变化,rear随着数据输入而变化)
(2)思路分析
1.将尾指针往后移:rear+1,当front=rear【空】
2.若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所指的数组元素中,否则无法存入数据。rear==maxSize-1【队列满】
(3)代码实现
1.使用数组模拟队列,编写一个ArrayQueue类
//使用数组模拟队列,编写一个ArrayQueue类
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;//指向队列尾部,分析指向队列尾部的数据(就是队列的最后一个数据)
}
2.判断队列是否满
public boolean isFULL(){
return rear == maxSize-1;
}
3.判断队列是否为空
public boolean isEmpty(){
return rear == front;
}
4.添加数据到队列,入队列
//添加数据到队列,入队列
public void addQueue(int n){
//判断队列是否满
if(isFULL()){
System.out.println("队列满");
}
rear++;//让rear后移
arr[rear] = n;
}
5.获得队列的数据,出队列
public int getQueue(){
//判断队列是否为空
if(isEmpty()){
throw new RuntimeException("队列空,不能获取数据");
}
front++;//front后移
return arr[front];
}
6.显示队列的所有数据
public void showQueue(){
//遍历
if(isEmpty()){
System.out.println("队列为空,没有数据");
return;
}
for(int i = 0;i < arr.length;i++){
System.out.println(arr[i]);
}
}
7.显示队列的头数据,注意不是取出数据
public int headQueue(){
//判断是否为空
if(isEmpty()){
throw new RuntimeException("队列为空,不能显示头数据");
}
return arr[front+1];
}