美文网首页
数组实现队列

数组实现队列

作者: Responsibility_ | 来源:发表于2020-04-26 18:14 被阅读0次

队列的特点

队列是一种简单的线性数据结构,最大特点是先进先出。生活中的例子,例如:排队打饭,过独木桥等等。

代码实现队列

队列示意图:

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]);
        }
    }

这样就基本完成了一个队列的创建,其中有一些问题,就是无法多次重复利用这个数组,这个问题可以通过环形队列来解决.

相关文章

网友评论

      本文标题:数组实现队列

      本文链接:https://www.haomeiwen.com/subject/cbujwhtx.html