简述
-
与栈类似,也是一种线性结构
-
也是数组的子集
-
只能从一端添加元素,而从另一端取出元素,这个另一端叫队首
-
队列是一种先进先出(FIFO–First In First Out)的数据结构
应用
Java
线程池核心类ThreadPoolExecutor
接口定义
public interface Queue<E> {
int getSize();
default boolean isEmpty() {
return getSize() == 0;
}
void enqueue(E e);
E dequeue();
E getFront();
}
实现方式
-
数组队列
-
循环队列
数组队列的实现方式看起来很直观,但是有个缺点,就是它的空间利用率不高,当过多的元素出队后,前面空出的位置是浪费掉的,循环队列就是解决空间利用率的问题。
虽然循环队列的初衷是解决空间利用率问题,但实际上还带来了额外的效果,比如时间复杂度的降低。可以参考测试代码进行测试。
-
链表队列
基于链表
-
优先队列
基于线段树
我的实现
复杂度
优先队列的时间复杂度可能不准
实现方式 | enqueue | dequeue |
---|---|---|
ArrayQueue | O(1) 均摊 | O(n) |
LoopQueue | O(1) 均摊 | O(1) 均摊 |
LinkedListQueue | O(1) | O(1) |
PriorityQueue | O(logn) | O(logn) |