1、队列介绍
队列是一个有序列表,可以用数组或链表来实现。
队列遵循先入先出的原则。即先存入队列的数据,要先取出。后存入队列的数据要后取出。
队列存取数据的情况:
当增加数据时,头部没有变,尾部再增加。当取出数据时,头部在减少,尾部没有变。
说明是在队列的尾部增加数据,在队列的头部取出数据。
2、使用数组模拟队列
maxSize是该队列最大容量,因为队列的输入输出是分别从前后端来处理的,因此需要两个变量front以及rear分别记录对列前后端的下标,front会随则数据的输出改变,rear则会随则数据的输入而改变。
3、解读
1.创建一个队列类,在队列类中定义四个变量 变量1:maxSize,数组长度 变量2:arr,模拟队列的数组 变量3:front,队列的头指针,用于出队列 变量4:rear,队列的尾指针,用于入队列 2.定义构造器,初始化队列类,初始化数组长度,将front和rear指针指向-1,当添加元素或获取元素就向后移动 3.定义一个判断是否为空的方法,isEmpty,当不为空时 就可以出队列(获取元素) 4.定义一个判断是否已满的方法,isFull,当已满时 就可以入队列(添加元素) 5.定义添加元素的方法,addQueue,使用isFull判断是否已满,已满输出提示信息,未满就将rear指针向后移动一位,并赋值。 6.定义获取元素的方法,getQueue,使用isEmpty判断是否为空,为空输出提示信息,不为空就将front指7.针向后移动一位,并返回值。 8.定义展示数据的方法,showQueue,使用isEmpty判断是否为空,为空输出提示信息,不为空就将数组遍历。 9.定义展示队列头元素的方法,headQueue,使用isEmpty判断是否为空,为空输出提示信息,不为空就将头元素返回。
代码的实现
public class Queue_ {
public static void main(String[] args) {
// 创建一个队列
ArrayQueue arrayQueue = new ArrayQueue(3);
// 添加数据
arrayQueue.addQueue(33);
arrayQueue.addQueue(66);
arrayQueue.addQueue(99);
// 展示队列
arrayQueue.showQueue();
// 获取数据
System.out.println(arrayQueue.getQueue());
// 展示头数据
arrayQueue.headQueue();
}
}
// 使用数组模拟队列-编写一个ArrayQueue类
class ArrayQueue {
private int maxSize; // 表示数组的最大容量
private int[] arr; //模拟队列,存储数据
private int front; // 队列头指针
private int rear; // 队列尾指针
// 创造队列的构造器
public ArrayQueue(int arrMaxSize) {
maxSize = arrMaxSize;
arr = new int[maxSize];
front = -1; // 指向队列头部,分析出front是指向队列头的前一个位置
rear = -1; // 指向队列尾部,指向队列尾的数据(即队列最后一个数据)
}
// 判断队列是否已满
public boolean isFull() {
return rear == maxSize - 1; // 当尾指针在最后一位上,就为满
}
// 判断队列是否为空
public boolean isEmpty() {
return rear == front; //当头指针和尾指针相等,就说明为空
}
// 向队列添加元素,入队列
public void addQueue(int x) {
if (isFull()) { //
System.out.println("对列已满,不能添加数据");
return;
}
rear++; // 让rear后移
arr[rear] = x; // 向队列添加数据
}
//获取队列数据,出队列
public int getQueue() {
if (isEmpty()) { //判断队列是否为空
// 通过抛出异常
throw new RuntimeException("队列为空,不能获取数据");
}
front++; //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]);
}
}
// 显示对列的头数据
public int headQueue() {
if (isEmpty()) {
throw new RuntimeException("列表为空,没有数据");
}
return arr[front + 1];
}
}