基于简单循环数组实现队列(JAVA)

基于简单循环数组实现队列

循环数组
队列抽象数据类型的这种简单实现使用数组,在数组中,采用循环的方式则增加元素,并使用两个变量分别记录队首和队尾元素。通常,使用front变量和rear变量分别表示队列中的队首元素和队尾元素。

基于数组来存储队列中的元素,可能会出现数组被填满的情况。这时,如果执行入队操作,将抛出队列满异常,同样,如果对空队列出栈,会抛出队列空异常

代码

Tips:初始化时,front = rear = -1 代表队列为空

/**
 * 基于简单循环数组的队列实现
 */
public class ArrayQueue {

    private int front;
    private int rear;
    private int capacity;
    private int[] array;

    /**
     * 私有化构造器
     *
     * @param size
     */
    private ArrayQueue(int size) {
        capacity = size;
        front = -1;
        rear = -1;
        array = new int[size];
    }

    /**
     * 静态方法创建固定队列容量的队列
     *
     * @param size
     * @return
     */
    public static ArrayQueue createQueue(int size) {
        return new ArrayQueue(size);
    }

    /**
     * 队列判满
     *
     * @return
     */
    public boolean isFull() {
        return (rear + 1) % capacity == front;
    }

    /**
     * 队列判空
     */
    public boolean isEmpty() {
        return front == -1;
    }

    /**
     * 当前队列容量
     */
    public int getQueueSize() {
        return (capacity - front + rear + 1) % capacity;
    }

    /**
     * 入栈
     */
    public void enQueue(int data) {
        if (isFull()) {
            throw new RuntimeException("Queue is Full!");
        }
        rear = (rear + 1) % capacity;
        array[rear] = data;
        if (front == -1) {
            front = rear;
        }
    }

    /**
     * 出栈
     */
    public int deQueue() {
        Integer data = null;
        if (isEmpty()) {
            throw new RuntimeException("Queue is empty!");
        }
        data = array[front];
        if (front == rear) {
            front = rear - 1;
        } else {
            front = (front + 1) % capacity;
        }
        return data;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值