队列的特点
队列是一种简单的线性数据结构,最大特点是先进先出。生活中的例子,例如:排队打饭,过独木桥等等。
代码实现队列
队列示意图:
image.png在实现队列前,要先处理两个情况:
- 队列为空,当头和尾下标相等时,队列为空
- 队列为满,当尾下标等于数组长度-1时,队列为满
队列需要两个指针,头指针和尾指针,由于Java是完全面向对象的语言,因此要先设计一个队列类。
成员属性如下:
class arrayQueue {
//头
int front;
//尾
int rear;
//数组最大值
int arrayMax;
//数组
int[] array;
}
我们在构造方法中来创建一个数组:
//构造方法,创建数组
public arrayQueue(int arrayMax) {
// 创建数组
array = new int[arrayMax];
// 设置头
this.front = -1;
// 设置尾
this.rear = -1;
//数组长度
this.arrayMax = arrayMax;
}
队列的基本方法有加入元素,取出元素,展示队列.当然在这些方法之前我们还要处理空和满的情况.
空队列无法取出元素,满队列无法加入元素
- 处理队列为空的方法,当头和尾下标相同时,队列为空
public boolean isEmpty() {
return rear == front;
}
- 处理队列为满的方法,当尾下标等于数组长度-1时,队列为满
public boolean isFull() {
// 如果尾部等于数组长度-1
return this.rear == arrayMax - 1;
}
- 添加数据,添加数据前先判断数组是否为空,并抛出自定义异常
//添加数据
public void add(int n) {
// 如果满了,就不能添加了
if (isFull()) {
System.out.println("队列满了");
throw new RuntimeException("队列满了不能添加数据");
}
// 从队尾加数据
rear++;
array[rear] = n;
}
- 取出数据,先进先出,因此从队列的头部取出,判断队列是否为空,否则抛出异常
//取出数据
public int getQueue() {
// 队列空不能取出数据
if (isEmpty()) {
throw new RuntimeException("队列为空不能取出数据");
}
// 从队头拿数据
front++;
return array[front];
}
- 展示队列,遍历这个数组即可
//展示数据
public void showQueue() {
// 数组为空则无需遍历
if (isEmpty()) {
System.out.println("数据空");
throw new RuntimeException("队列为空不能取出数据");
}
// 遍历数组
for (int i = 0; i < array.length; i++) {
System.out.printf("array[%d] = %d \n", i, array[i]);
}
}
这样就基本完成了一个队列的创建,其中有一些问题,就是无法多次重复利用这个数组,这个问题可以通过环形队列来解决.
网友评论