美文网首页
数组实现队列

数组实现队列

作者: 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