八、队列(Queue)

118 阅读1分钟

队列(Queue)

队列\color{#00afef}{队列}是一种特殊的线性表,只能在头尾两端\color{#ed7d30}{头尾两端}进行操作

  • 队尾(rear):只能从队尾添加\color{#ed7d30}{队尾添加}元素,一般叫做enQueue,入队\color{#ed7d30}{enQueue,入队}
  • 队头(front):只能从队头移除\color{#ed7d30}{队头移除}元素,一般叫做deQueue,出队\color{#ed7d30}{deQueue,出队}
  • 先进先出的原则,First In First Out,FIFO

队列(Queue)

队列的接口设计

int size(); // 元素的数量
boolean isEmpty(); // 是否为空
void clear(); // 清空
void enQueue(E element); // 入队
E deQueue(); // 出队
E front(); // 获取队列的头元素

思考:队列的内部实现是否可以直接利用之前讲解的数据结构?

  • 动态数组、链表
  • 优先使用双向链表\color{#00afef}{双向链表},因为队列主要是往头尾\color{#ed7d30}{头尾}操作元素
public class Queue<E> {

	private List<E> list = new LinkedList<>();
	
	public int size() {
		return list.size();
	}
	
	public boolean isEmpty() {
		return list.isEmpty();
	}
	
	public void enQueue(E element) {// 官方的是offer(E e)
		list.add(element);
	}
	
	public E deQueue() {// 官方的是poll()
		return list.remove(0);
	}
	
	public E front() {// 官方的是peek()
		return list.get(0);
	}
 
 	public void clear() {
		list.clear();
	}
}