队列

含义:队列是一个有序列表,可以用数组或链表来实现

特点:先进先出,队列中添加和删除数据的操作分别是在两端进行的

 

数组模拟队列

1.maxSize是队列最大容量;front+1指向队列最前面的元素,创建初始值为-1,随输出而增加;rear指向队列最后的元素,创建初始值为-1,随输入而增加;

2.front==rear,队列为空;rear==maxSize-1,队列已满

3.缺陷:数组不能复用

 

数组模拟环形队列

1.maxSize是队列最大容量,maxSize - 1是队列最大可容纳元素数量

2.front指向队列第一个元素,创建初始值为 0;rear 指向队列最后一个元素的后一个位置,创建初始值为 0,空出一个空间做约定

3.rear == front,队列为空;(rear + 1) % maxSize == front,队列已满;(rear + maxSize - front) % maxSize,获取队列中有效元素的个数

 

代码实现

public class CircleArrayQueue {//数组模拟环形队列
    private int maxSize;//表示数组的最大容量
    private int front;//队列头
    private int rear;//队列尾
    private int[] array;//该数组用于存放数据,模拟队列

    public CircleArrayQueue(int maxSize) {//创建队列的构造器
        this.maxSize = maxSize;
        array = new int[maxSize];
        front = 0;//front指向队列第一个元素,创建初始值为0
        rear = 0;//rear指向队列最后一个元素的后一个位置,创建初始值为0,空出一个空间做约定
    }

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

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

    public void addQueue(int n) {//添加数据到队列
        if (isFull()) {
            return;
        }
        array[rear] = n;
        rear = (rear + 1) % maxSize;//rear后移一位
    }

    public int getQueue() {//获取队列的数据,出队列
        if (isEmpty()) {
            throw new RuntimeException("队列为空");
        }
        int value = array[front];
        front = (front + 1) % maxSize;//front后移一位
        return value;
    }

    public void showQueue() {//显示队列的所有数据,注意不是取出数据
        if (isEmpty()) {
            return;
        }
        //(rear + maxSize - front) % maxSize队列中有效数据元素的个数
        for (int i = front; i < front + (rear + maxSize - front) % maxSize; i++) {
            System.out.println(array[i % maxSize]);//[i % maxSize]使i可以循环打印
        }
    }

    public int headQueue() {//显示队列的头数据,注意不是取出数据
        if (isEmpty()) {
            throw new RuntimeException("队列为空");
        }
        return array[front];
    }
}

 

posted @   半条咸鱼  阅读(74)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示