IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数组实现环形队列(Java) -> 正文阅读

[数据结构与算法]数组实现环形队列(Java)

实现思路:

  1. front 表示指向队列第一个元素,初始化为0。

  2. rear 表示指向队列最后一个元素的后一个位置,初始化为0。

  3. 数组实现环形队列需要预留一个空位置(不放元素)。

  4. 当队列已满时,满足:(rear + 1) % capacity == front

  5. 当队列为空时,满足:(rear + capacity - front) % capacity == 0

  6. 当出队列时,front变化满足front = (front + 1) % capacity

  7. 队列元素个数等于(rear + capacity - front) % capacity

完整代码

public class CircleArray {
    private int front;
    private int rear;
    private int capacity;
    int []queue;

    //构造器
    public CircleArray(){
        front = 0;
        rear = 0;
        capacity = 10;
        queue = new int[capacity];
    }
    public CircleArray(int capacity){
        front  = 0;
        rear = 0;
        this.capacity = capacity;
        queue = new int[capacity];
    }
    //判断队列是否已满
    public boolean isFull(){
        return (rear + 1) % capacity == front;
    }

    //判空
    public boolean isEmpty(){
        return (rear + capacity - front) % capacity == 0;
    }

    //入队列
    public void queueAdd(int x){
        if(isFull()){
            throw new RuntimeException("队列已满,不能入队列!");
        }
        queue[rear] = x;
        //会空一个位置
        rear = (rear + 1) % capacity;
    }

    //取数据
    public int queueFront(){
        if(isEmpty()){
            throw new RuntimeException("队列为空,无法取数据!");
        }
        return queue[front];
    }
    //出队列
    public int queuePop(){
        if(isEmpty()){
            throw new RuntimeException("队列为空,不能出队列!");
        }
        int value = queue[front];
        front = (front + 1) % capacity;
        return value;
    }
    //获取队列有效数据的个数
    public int queueSize(){
        return (rear + capacity - front) % capacity;
    }

    //显示队列数据
    public void showQueue(){
        if(isEmpty()){
            throw new RuntimeException("队列为空,无法显示数据!");
        }
        int tmp = front;
        for(int i = 0; i < queueSize(); i++){
            System.out.print(queue[tmp] + " ");
            tmp = (tmp + 1) % capacity;
        }
    }
}

代码测试

测试代码:

class Test01{
    public static void main(String[] args) {
        CircleArray c = new CircleArray(5);
        System.out.println("a:isFull");
        System.out.println("b:isEmpty");
        System.out.println("c:queueAdd");
        System.out.println("d:queueFront");
        System.out.println("e:queuePop");
        System.out.println("f:queueSize");
        System.out.println("g:showQueue");
        Scanner scanner  = new Scanner(System.in);
        while(true){
            char k = scanner.next().charAt(0);
            switch(k){
                case 'a':
                    System.out.println(c.isFull());
                    break;
                case 'b':
                    System.out.println(c.isEmpty());
                    break;
                case 'c':
                    try{
                        c.queueAdd(scanner.nextInt());
                    }catch(RuntimeException e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case 'd':
                    try{
                        System.out.println("对头数据为:" + c.queueFront());
                    }catch(RuntimeException e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case 'e':
                    try{
                        System.out.println(c.queuePop() + "已被出队列!");
                    }catch(RuntimeException e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case 'f':
                    System.out.println(c.queueSize());
                    break;
                case 'g':
                        try{
                            c.showQueue();
                        }catch(RuntimeException e){
                            System.out.println(e.getMessage());
                        }
                        break;
                default:
                        break;


            }
        }
    }
}

在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 12:08:32  更:2022-05-10 12:08:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:41:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码