• 数组实现队列


    1、队列的定义

    ​ 队列是一个有序列表,可以使用数组或者链表来实现。其遵循先入先出原则,即先存入队列的元素要先取出;后存入队列的元素要后取出。

    2、数组模拟队列的分析

    • 使用数组的结构来存储队列的数据,需要声明一个最大容量以及两个变量来存储首尾位置。
    • 赋初始值首指针 front = 0,尾指针 rear = 0;首指针指向的是第一个数据,尾指针指向的是最后一个数据的下一个位置,此处留一个空余位置作为约定。
    • 判断队列满的条件是尾指针加一对最大容量取模等于首指针时,队列满,即:(rear + 1) % maxSize == front。例:数组容量为10,当rear = 9, front = 0 时,队列满。
    • 判断队列为空的条件是首指针等于尾指针,即 front == rear。
    • 这时的队列是一个环形的队列,队列中的有效数据个数为 (rear + maxSize - front) % maxSize。
    • 在队列添加元素时,首先需要去判断队列是否满,不满才能进行后续操作。

    3、实现代码

    public class ArrayQueue {
    
        private int maxSize;//数组的最大容量
        private int front;//队列头部,指向队列的头部,包含第一个数据
        private int rear;//队列尾部,指向队列的尾部,最后一个数据的后一个位置
        private int[] arr;//存放队列的数据
    
        public ArrayQueue(int maxSize){
            this.maxSize = maxSize;
            arr = new int[maxSize];
        }
    
        /**
         * 判断队列是否满:尾部指向数组最大长度减一时满
         * @return
         */
        public boolean isFull(){
            return (rear + 1) % maxSize == front;
        }
    
        /**
         * 判断队列是否为空:首部等于尾部是为空
         * @return
         */
        public boolean isEmpty(){
            return rear == front;
        }
    
        /**
         * 添加数据到队列中
         * @param data
         */
        public void addQueue(int data){
            //判断队列是否满
            if (isFull()){
                System.out.println("队列已满,不能添加数据");
                return;
            }
            arr[rear] = data;
            rear = (rear + 1) % maxSize;
        }
    
        /**
         * 从队列中取出数据
         * @return
         */
        public int getQueue(){
            //判断队列是否为空
            if (isEmpty()){
                throw new RuntimeException("队列为空,不能取数据");
            }
            int val = arr[front];
            front = (front + 1) % maxSize;
            return val;
        }
    }
    
  • 相关阅读:
    CMake入门
    医学图像中的窗宽、窗位
    移动端侧滑
    html5向左滑动删除特效
    同意条款按钮可用
    jquery 日历插件datepicker格式调整
    复选框美化
    select下拉框美化
    单选、复选框判断是否选中
    点击清空文本框中输入的值
  • 原文地址:https://www.cnblogs.com/Mhang/p/12303731.html
Copyright © 2020-2023  润新知