3. 基于自定义数组的普通队列实现

普通队列有个致命的地方就是 每次当队首弹出的时候,后续的所有元素都需要移动位置,复杂度很高,当数据量大的时候很致命,后面有循环队列来解决该问题

Queue队列接口

package com.lonely.队列;

/**
 * @author ztkj-hzb
 * @Date 2019/6/18 15:21
 * @Description 队列 先进先出
 */
public interface Queue<T> {

    /**
     * 入队
     */
    void enqueue(T t);

    /**
     * 出队
     *
     * @return
     */
    T dequeue();

    /**
     * 获取队首的数据
     *
     * @return
     */
    T getFront();

    /**
     * 获取队列中的长度
     *
     * @return
     */
    int getSize();

    /**
     * 是否为空
     *
     * @return
     */
    boolean isEmpty();

    /**
     * 获取队列中容量
     *
     * @return
     */
    int getCapcity();
}

普通队列

package com.lonely.队列;

import com.lonely.数组.MyArray;

/**
 * @author ztkj-hzb
 * @Date 2019/6/18 15:27
 * @Description 基于数组实现的队列, 每次出队后,需要将后续的所有元素移动位置,数据量大的情况下很影响性能
 */
public class ArrayQueue<T> implements Queue<T> {

    /**
     * 基于二次封装数组实现
     */
    private MyArray<T> myArray;

    public ArrayQueue() {
        this(10);
    }

    public ArrayQueue(int capcity) {
        this.myArray = new MyArray<>(capcity);
    }

    /**
     * 入队
     */
    @Override
    public void enqueue(T t) {
        this.myArray.addLast(t);
    }

    /**
     * 出队
     *
     * @return
     */
    @Override
    public T dequeue() {
        return this.myArray.removeFirst();
    }


    /**
     * 获取队首数据
     *
     * @return
     */
    @Override
    public T getFront() {
        return this.myArray.get(0);
    }

    /**
     * 获取队列长度
     *
     * @return
     */
    @Override
    public int getSize() {
        return this.myArray.getSize();
    }

    /**
     * 判断队列长度是否为空
     *
     * @return
     */
    @Override
    public boolean isEmpty() {
        return this.myArray.isEmpty();
    }

    /**
     * 获取队列的实际容量
     *
     * @return
     */
    @Override
    public int getCapcity() {
        return this.myArray.getCapcity();
    }


    /**
     * 格式化输出
     *
     * @return
     */
    @Override
    public String toString() {
        StringBuilder message = new StringBuilder("ArrayQueue{");

        for (int i = 0; i < this.myArray.getSize(); i++) {
            if (i == this.myArray.getSize() - 1) {
                //最后一个
                message.append(this.myArray.get(i));
            } else {
                message.append(this.myArray.get(i)).append(",");
            }
        }

        message.append("}");
        return message.toString();
    }
}

你可能感兴趣的:(数据结构)