首页 > 编程语言 > 详细

数组实现队列

时间:2020-10-05 21:52:54      阅读:18      评论:0      收藏:0      [点我收藏+]

咱不啰嗦队列的特性先进先出,直接上代码。

技术分享图片
package com.dfsn.cloud.eureka;

public class Queue {
    private int[] arr;
    private int size;
    private int pushIndex;
    private int getIndex;

    Queue(int initSize) {
        if (initSize < 0) {
            throw new IllegalArgumentException("队列长度不能小于0");
        }
        arr = new int[initSize];
    }

    public void add(int obj) {
        if (size == arr.length) {
            throw new ArrayIndexOutOfBoundsException("队列已经满了");
        }
        arr[pushIndex++] = obj;
        pushIndex = pushIndex == arr.length ? 0 : pushIndex;
        size++;
    }

    public int get() {
        if (size == 0) {
            throw new ArrayIndexOutOfBoundsException("队列中没有数据");
        }
        int temp = getIndex;
        getIndex++;
        getIndex = getIndex == arr.length ? 0 : getIndex;
        size--;
        return arr[temp];
    }

}
View Code

实现思路:

1 有一个存放数据的数组,该数组的长度在Queue对象初始化时需要设置容量。

2 往队列添加元素,size变量默认是0。如果size等于数组的长度。表示当前队列已经满了,如果没有满则向队列添加元素,添加元素后将size自增1。pushIndex标记下一个可用队列的位置,默认是0。如果Queue的大小是3则pushIndex的值是0,1,2。在每次添加元素后,将pushIndex自增1,自增后的标记位如果等于数组的长度,则重置位置为0。意思就是当0,1,2添加完毕后,下一个元素要想添加只能添加到0位置,但是这会不会覆盖原有的元素?不会,因为有size变量限制。添加3个元素后就不能在添加了。

3 元素出队列,首先判断size如果是0则表示没有元素,不能出,如果不等于0则表示有元素可以出,size自减1。getIndex标记下一个出队列的位置,默认是0。每出一个元素自增1,然后判断出队列位置是否等于队列长度,如果大于则重置位置为0,也就限定了,出队列的顺序是0,1,2。那会不会出现下标越界呢?不会,因为有size判断,如果size是0就表示没有元素。

数组实现队列

原文:https://www.cnblogs.com/zumengjie/p/13771459.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!