用数组实现环形队列

看了尚硅谷数据结构与算法的视频,跟着写了一个使用数组来实现环形队列的代码,插个眼记录一下。
就这个实现而言,主要需要注意的是:头指针、尾指针循环时采取的“取模”操作,以及存在一个数组元素空间的预留
这个实现,其实有很多种方法,这只是其中一种
代码如下:

class CircleArray{

private int maxSize;    //数组的最大容量
private int front;      //队列头
private int rear;       //队列尾
private int[] arr;      //存放数据

//创建构造器
// 按我理解,构造器应该就是一个初始化的工具
// 调用格式应该是:ArrayQueue xxx = new ArrayQueue(数组的最大容量)
//越来越感觉这像 C 的结构体
public CircleArray(int arrMaxSize){

    maxSize = arrMaxSize;
    front = 0;             //指向队列头部,即头指针
    rear = 0;              //指向队列尾部,即尾指针
    arr = new int[maxSize];

}

//判断队列满
//boolean型,返回 ture 或 false
public boolean isFull(){
    return (rear+1) % maxSize ==  front;
}

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

//写数据,仅限 int 型
public void addQueue(int n){
    //判断队列是否满
    if(isFull()){
        System.out.println("队列已满,不能加入数据");
        return;
    }

    arr[rear] = n;  //写数据入队列
    rear = (rear + 1) % maxSize;        //尾指针后退一位, 取模是必须考虑的,因为环形
}

//取数据

public int getFront() {

    if (isEmpty()){
        //抛出异常
        throw new RuntimeException("队列空,无法读取数据");

    }

    int Value = arr[front];  //先将数据存入一个临时变量,等会直接返回这个数值

    front = (front + 1) % maxSize;

    return Value;

}

//显示所有的数据,遍历
public void showQueue() {
    if (isEmpty()){
        System.out.println("队列空,无法读取数据");
        return;
    }

    for (int i = front; i < front + size(); i++) {
        System.out.printf("arr[%d] = %d\n", i % maxSize, arr[i % maxSize]);
    }

}

public  int size(){

    //用到了一个算法,取模的操作,是基本操作,有必要多加注意
    //对提升代码水平 和 提高代码简洁度 都很有帮助
    //装逼利器

    return (rear + maxSize - front) % maxSize;

}



public int headQueue() {

    if (isEmpty()){
        //抛出异常
        throw new RuntimeException("队列空,无法读取数据");
    }
    return arr[front];
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值