数组实现环形队列

代码如下:


public class CircleQueue {
    //初始化数组的长度,用来判断
    private int maxSize;
    //起始索引
    private int front;
    //结束索引
    private int rear;
    //初始数组
    private int[] arr;
    
    //初始化参数
    public CircleQueue (int maxSize){
        this.maxSize = maxSize;
        arr = new int[maxSize];
        front = 0;
        rear = 0;
    }
    
    public boolean isEmpty () {
        return rear == front;
    }
    //因为rear和front一直是紧挨着的
    //所以只要rear+1就应该是front
    //所以算法是(rear+1)%maxSize==front
    public boolean isFull () {
        return (rear + 1) % maxSize == front;
    }
    
    public void add (int n) {
        if(isFull()){
            System.put.prinln("queue is full.");
            return;
        }
        //直接将数据加入
        arr[rear] = n;
        //将rear后后移
        rear = (rear + 1) % maxSize;
    }
    
    public int get () {
        if(isEmpty()){
            System.put.prinln("queue is empty.");
            return;
        }
        int result = arr[front];
        front = (front + 1) % maxSize;
        return result;
    }
    
    //显示队列所有数据
    public void show () {
        if(isEmpty){
            System.out.println("empty");
            return;
        }
        //假设maxSize=5,fron=2,rear=0
        //这确实是对的
        for(int i = front; i <front + size();i++){
            System.out.printf("arr[%d]=%d/t",i%maxSize,arr[i%maxSize]);
        }
    }
    
    public int size () {
        return (rear + maxSize - front) % maxSize;
    } 
}

关注点:
(1)(rear + maxSize - front) % maxSize用来求有效元素个数
(2) i <front +((rear + maxSize - front) % maxSize)控制循环次数
(3)数组需要消耗一个空间来作为rear指向

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数据结构 第7讲 循环队列 过了一段时间,小张再也受不了...
    rainchxy阅读 12,999评论 4 16
  • 这里我们只介绍线性表中 存储结构不同的 顺序表 和 链表,以及操作受限的 栈 和 队列 。 数据结构与算法系列文章...
    且行且珍惜_iOS阅读 5,916评论 0 5
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,493评论 0 13
  • 队列 队列的基本概念 队列是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除;向队列中插入元...
    ribose阅读 3,828评论 0 2
  • 注:不足及错误请指正 +qq1366963396讨论 队列(queue)是只允许在一端进行插入操作,而在另一端进行...
    lxr_阅读 4,421评论 0 0

友情链接更多精彩内容