Java数组实现循环队列的两种方法

用java实现循环队列的方法:

1、增加一个属性size用来记录目前的元素个数。目的是当head=rear的时候,通过size=0还是size=数组长度,来区分队列为空,或者队列已满。

2、数组中只存储数组大小-1个元素,保证rear转一圈之后不会和head相等,也就是队列满的时候,rear+1=head,中间刚好空一个元素。

      当rear=head的时候,一定是队列空了。

 

下面代码使用第一种方法实现。  你可以尝试写出第二种实现。

public class ArrayQueue {
    private int[] arr = new int[5];
    private int size = 0;
    private int head = 0;
    private int tail = 0;

    public static void main(String[] args) {
        /*
        *  0 bipush 10
         2 istore_1
         3 iload_1
         4 iinc 1 by 1
         7 istore_1
         *
         int tail = 10;
        tail = tail++;
        *
        *
        *
        *  0 bipush 10
         2 istore_1
         3 iinc 1 by 1
         6 getstatic #5 <java/lang/System.out>
         9 iload_1
         * int tail = 10;
        tail++;
        System.out.println(tail);
        * */

        ArrayQueue arrayQueue = new ArrayQueue();
        arrayQueue.add(1);
        arrayQueue.add(2);
        arrayQueue.add(3);

        System.out.println(arrayQueue.poll());
        System.out.println(arrayQueue.poll());
        System.out.println(arrayQueue.poll());

        arrayQueue.add(4);
        arrayQueue.add(5);
        arrayQueue.add(6);
        arrayQueue.add(7);
        arrayQueue.add(8);
        System.out.println(arrayQueue.poll());
        System.out.println(arrayQueue.poll());
        System.out.println(arrayQueue.poll());
        System.out.println(arrayQueue.poll());
        System.out.println(arrayQueue.poll());
        System.out.println(arrayQueue.head +"  "+arrayQueue.tail);

        //System.out.println(arrayQueue.poll());
    }

    public void add(int value){
        if(tail == head && size == arr.length){
            System.out.println("队列已经满");
            return;
        }
        arr[tail++] = value;
        tail = tail%arr.length;
        size ++;
    }

    public int poll(){
        if(head == tail && size == 0){
            System.out.println("队列已经空");
            return -1;
        }

        int ret = arr[head++];
        head = head%arr.length;
        size--;
        return ret;
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值