简介:
队列也是和种线性结构,同样也是一种操作受限有线性表,相比数组,队列对应的操作是数组的子集,只能从一端(队尾)添加元素,从另一端(队首)取出元素。它是一种先进先出的数据结构(First In First Out 即 FIFO)
应用场景
基本操作:
数组队列
代码实现:
public interface Queue<T> {
/**
* 进队
* @param e
*/
void enqueue(T e);
/**
* 出队
* @return
*/
T dequque();
/**
* 获取队首元素
* @return
*/
T getFront();
/**
* 获取队中元素个数
* @return
*/
int getSize();
/**
* 判断队是否为空
* @return
*/
boolean isEmpty();
}
public class ArrayQueue<T> implements Queue<T>{
private ArrayList<T> 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