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:数据结构(3)数组表示循环队列 -> 正文阅读

[游戏开发]JAVA:数据结构(3)数组表示循环队列

public class Test {
    public static void main(String[] args) {
        cycleArrayQueue caq1 = new cycleArrayQueue(4);
        caq1.inCycleQueue(1);
        caq1.inCycleQueue(2);
        caq1.inCycleQueue(3);
        caq1.checkEachElement();
        System.out.println("-----------------------------");
        caq1.outCycleQueue();
        caq1.inCycleQueue(8);
        caq1.checkEachElement();
        System.out.println("-----------");
        caq1.outCycleQueue();
        caq1.inCycleQueue(6);
        caq1.checkEachElement();
        System.out.println("-----------------------------------------------------");
        caq1.outCycleQueue();
        caq1.checkEachElement();
    }
}


class cycleArrayQueue{
    private int maxSize;// 数组的容量(存储数据的个数-1),因为其中一个空间用来当做判断队列是否已满的标志
    private int[] arr;// 存储数据介质——数组
    private int front;// 头指针
    private int rear; // 尾指针

    //构造方法创建环形队列
    public cycleArrayQueue(int maxSize){
        this.maxSize = maxSize;
        arr = new int[this.maxSize];
        front = rear = 0;//初始化rear和front
    }
    //判断队列空
    public boolean isEmpty(){
        return rear == front;
    }
    //判断队列满
    public boolean isFull(){
        return (rear+1)%maxSize == front;
    }
    //入列
    public void inCycleQueue(int n){
        if(isFull()){
            System.out.println("队列满,无法入列");
        }else{
            arr[rear] = n;// 为什么要把n给arr[rear]呢? 因为front只有在出队列的时候才会用,
            // 而rear会随着入列向后移,所以要把n赋给未后移之前的arr[rear],然后再后移rear.
            rear = (rear+1)%maxSize;  //考虑数组越界的时候,只需要考虑front和rear都在maxSize-1的情况,
            // 其它不用考虑,(想到)++即可(千万别直接写++)。
        }
    }
    //出列
    public int outCycleQueue(){
        if(isEmpty()){
            throw new RuntimeException("队列空,无法出列"); // 这里抛出异常的原因是返回值类型为int,return啥都不好,只能抛出异常了。
        }else{
            int value = arr[front];
            front = (front+1)%maxSize; //考虑数组越界的时候,只需要考虑front和rear都在maxSize-1的情况,
            // 其它不用考虑,(想到)++即可(千万别直接写++)。
            return value;
        }
    }
    //元素遍历
    public void checkEachElement(){
        if(isEmpty()){
            throw new RuntimeException("队列空,无法遍历");
        }else{
            for(int i=front;i<front+count();i++){
                System.out.printf("arr[%d]=%d\n",i%maxSize,arr[i%maxSize]);//这个地方一定要返回i%maxSize,不然会有arr[4]这种情况出现。
            }
        }
    }
    //遍历时需要用的从front到front+count其中的(count)
    public int count(){
        return (rear+maxSize-front)%maxSize;
    }

}

//以下是输出结果,经过测试所有功能全部正常

arr[0]=1
arr[1]=2
arr[2]=3
-----------------------------
arr[1]=2
arr[2]=3
arr[3]=8
-----------
arr[2]=3
arr[3]=8
arr[0]=6
-----------------------------------------------------
arr[3]=8
arr[0]=6

所有注意事项以及“小算法”涉及的点,全部都在注释中,若有疑问,请参考《尚硅谷数据结构——韩顺平》

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 18:15:32  更:2022-04-18 18:19:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 21:59:58-

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