加载中...

优先队列

什么是优先队列:

优先队列就好比会员制的队列,有优先级这一特殊属性,根据优先级的高低来确定出队顺序

优先队列也是一种抽象数据类型。优先队列中的每个元素都有优先级,而优先级高(或者低)的将会先出队,而优先级相同的则按照其在优先队列中的顺序依次出队。

也就是说优先队列,通常会有下面的操作:

这样的话,我们完全可以使用链表来实现,例如以O(1)复杂度插入,每次在表头插入,而以O(N)复杂度执行删除最小元素;或者以O(N)复杂度插入,保持链表有序,而以O(1)复杂度删除。

然而优先队列往往使用堆来实现,以至于通常说堆时,就自然而然地想到了优先队列。

具体使用方法(实现方法也就是上述提到到的堆,本文只对使用进行简单说明):

import java.util.PriorityQueue;

public class 优先队列 {

	public static void main(String[] args) {

		Node a = new Node(0, 0);
		Node b = new Node(100, 999);
		PriorityQueue<Node> priorityQueue = new PriorityQueue<>();
		priorityQueue.add(b);
		System.out.println("我是b我先入队");
		priorityQueue.add(a);
		System.out.println("我是a我后入队");
		while (!priorityQueue.isEmpty()) {
			System.out.println(priorityQueue.remove());
		}
	}

}

class Node implements Comparable<Node> {
	int u;
	int v;

	public Node(int u, int v) {
		super();
		this.u = u;
		this.v = v;
	}

	@Override
	public String toString() {
		return "Node [u=" + u + ", v=" + v + "]";
	}

	@Override
	public int compareTo(Node o) {
		return this.u - o.u;// 数小的在前面
	}
}

image-20230323204745006

posted @ 2023-03-23 20:49  ChuenSan  阅读(51)  评论(0编辑  收藏  举报