java数据结构复习之循环队列

22 篇文章 0 订阅
21 篇文章 0 订阅

java数据结构复习之循环队列

package learn;

/**
 *使用的是循环队列,这个取元素之后,队列能够复用。
 */
public class Queue {
    public static void main(String[] args) {
        ArrayQueue queue = new ArrayQueue(10);
        queue.addQueue(2);
        queue.addQueue(3);
        queue.addQueue(6);
        queue.show();
        System.out.println("================");
        int a=queue.getQueue();
        int b=queue.getQueue();
        System.out.println(a+b);
        queue.show();
    }
}

class ArrayQueue{
    private int max_Size;//最大容量
    private int pre;//队列头,这里初始指向索引0的位置
    private int end;//队列尾,初始值为0,这里指向队列最后一个元素的后一个位置,所以预留一个元素啥也不做
    private int[] arr;

    public ArrayQueue(int max_Size) {
        this.max_Size = max_Size;
        arr=new int[max_Size];
        pre=0;
        end=0;
    }
    public boolean isFull() {
        return (end + 1) % max_Size == pre;
    }
    public boolean isEmpty(){
        return end==pre;
    }
    public void addQueue(int n){
        if(isFull()){
            System.out.println("队列满了!别放了");
            return;
        }
        arr[end]=n;
        end=(end+1)%max_Size;

    }
    public int getQueue(){
        if(isEmpty()){
           throw new RuntimeException("队列为空,取不了");
        }
        int value=arr[pre];
        pre=(pre+1)%max_Size;
        return value;
    }
    public int num(){
        return (end+max_Size-pre)%max_Size;
    }
    public void show(){
        for(int i=pre;i<num();i++){
            System.out.println(arr[i]);
        }
    }
}

注释写的很清楚了,别的就不说了,主要说一下为什么留一个空的元素位,主要是用来判断是空还是满的,以为,按照逻辑,end 那里是放入元素之后,才end++,所以说一旦放满,因为没有空的元素位,此时end和pre指向的位置是相同的,不能判断是全空还是全满相减为0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值