美文网首页Java数据结构和算法
数据结构之 环形队列【数组实现】

数据结构之 环形队列【数组实现】

作者: 测试员 | 来源:发表于2019-08-22 09:55 被阅读0次

简述

队列是一个有序列表,可以用数组或是链表来实现。
遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出


实现思路

1)既然是环形队列,那就一定有头有尾,有容量
2)既然是数组实现,那一定有个算法保证可以让数组循环起来


实现代码

/**
 * 这是一个重复可用的环形链表 但是 数字下标为maxSize的位置没有使用
 */
public class ArrayQueue {
    /**
     * 最大总量
     */
    private int maxSize;
    /**
     * 队列头
     */
    private int front;
    /**
     * 队列尾
     */
    private int rear;
    /**
     * 存放数据用的数组队列
     */
    private int[] queueArray;

    /**
     * 初始化一个maxSize长度的数组队列。
     *
     * @param maxSize
     */
    public ArrayQueue(int maxSize) {
        this.maxSize = maxSize;
        this.queueArray = new int[maxSize];
    }

    /**
     * 判断队列是否满
     */
    public boolean isFull() {
        return (rear + 1) % maxSize == front;
    }

    /**
     * 判断队列是否为空
     */
    public boolean isEmpty() {
        return rear == front;
    }

    /**
     * 往队列中添加一个元素
     *
     * @param element
     * @return
     */
    public boolean addQueue(int element) {

        boolean flag = false;
        if (isFull()) {
            return flag;
        }
        //队尾后移一位
        queueArray[rear] = element;
        rear = (rear + 1) % maxSize;
        flag = true;
        return flag;
    }

    /**
     * @return 弹出&获取当前队首任务
     */
    public int takeQueue() {
        if (isEmpty()) {
            throw new RuntimeException("队列为空");
        }
        //队首后移一位
        int value = queueArray[front];
        queueArray[front] = 0;
        front = (front + 1) % maxSize;
        return value;
    }

    /**
     * 显示队列里的数据
     */
    public void showQueue() {
        if (isEmpty()) {
            System.out.println("队列里没有数据");
            return;
        }
        for (int i = front; i < front + size(); i++) {
            System.out.println("当前数据顺序位数 = " + queueArray[i]);
        }
    }

    /**
     * @return 队列中有效数据个数
     */
    public int size() {
        return (rear + maxSize - front) % maxSize;
    }
}

相关文章

  • 数据结构之 环形队列【数组实现】

    简述 队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要...

  • 数据结构

    稀疏数组 代码实现: 队列 代码实现: 环形队列 什么时候队列满:(rear+1)%maxsize == fron...

  • 数组实现环形队列

    利用数组结构在队列的基础下用取模算法来实现环形队列。 环形队列拥有复用功能。 主要算法思想:1)front指向队列...

  • 数据结构之队列

    什么是队列 队列是一个有序列表, 可以用数组或链表实现 先入先出 使用数组模拟队列和环形队列 用数组模拟队列 思路...

  • workQueue有以下七种选择

    : ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列(数组结构可配合指针实现一个环形队列)。...

  • 数组实现环形队列

    我这里实现的是循环队列 front:指向第一个数据的位置rear:指向最后一个数据的下一个位置maxSize:数组...

  • 使用数组实现环形队列

    整体思路解析 上次我们演示了使用数组实现队列的方式,在结尾处提出了一个问题,因为我们使用双指针后移的方式,被弹出队...

  • 数组实现的环形队列

    基本思想: 环形展开成链表,在链表上模拟环形队列; head 和tail只增不减,add 、remove、size...

  • 环形队列-数组简单实现

  • 循环队列

    顺序存储实现循环队列 使用数组模拟环形结构,数组大小为MAXQSIZE front表示队头元素 rear表示队尾元...

网友评论

    本文标题:数据结构之 环形队列【数组实现】

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