第三章 队列

简介:

队列也是和种线性结构,同样也是一种操作受限有线性表,相比数组,队列对应的操作是数组的子集,只能从一端(队尾)添加元素,从另一端(队首)取出元素。它是一种先进先出的数据结构(First In First Out 即 FIFO)

应用场景

基本操作:

 

 

 

数组队列

代码实现:

public interface Queue {

    /**
     * 进队
     * @param e
     */
    void enqueue(T e);

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

    /**
     * 获取队首元素
     * @return
     */
    T getFront();

    /**
     * 获取队中元素个数
     * @return
     */
    int getSize();

    /**
     * 判断队是否为空
     * @return
     */
    boolean isEmpty();
}

 

public class ArrayQueue implements Queue{

    private ArrayList array;

    public ArrayQueue(int capacity) {
        this.array = new ArrayList<>(capacity);
    }

    public ArrayQueue() {
        this.array = new ArrayList<>();
    }

    @Override
    public int getSize() {
        return this.array.getSize();
    }

    @Override
    public boolean isEmpty() {
        return this.array.isEmpty();
    }

    @Override
    public void enqueue(T e) {
        this.array.addLast(e);
    }

    @Override
    public T dequque() {
        return this.array.removeFirst();
    }

    @Override
    public T getFront() {
        return this.array.getFirst();
    }

    @Override
    public String toString() {
        StringBuffer rs = new StringBuffer();
        rs.append(String.format("Queue: size = %d, capacity = %d\n", this.array.getSize(), this.array.getCapacity()));
        rs.append("front [");
        for (int i = 0; i < this.array.getSize(); i ++){
            rs.append(this.array.get(i));
            if (i != this.array.getSize() -1){
                rs.append(", ");
            }
        }
        rs.append("] tail");
        return rs.toString();
    }
}

 

数组队列的各种操作时间复杂度分析

  • 添加操作
    •  enqueue(e):O(1)
  • resize:O(n)
  • 删除操作
    • dequeue:O(1)
  • 查找操作
    • getFront(index):O(1)

循环队列

 

 

优先队列

普通队列:先进先出,后进后出

优先队列:出队顺序和入队顺序无关,和优先级相关,和普通队列不同在于出队不同,优先级高的元素优先出队

Java中的PriorityQueue

 

 

 

 

你可能感兴趣的:(Java方面,数据结构与算法)