使用链表实现优先队列

2025年3月17日 | 阅读 3 分钟

优先队列是一种队列,其中队列中的每个元素都与某个优先级相关联,并且它们是根据其优先级来服务的。如果元素具有相同的优先级,则根据它们在队列中的顺序来服务。

主要,元素的值可以用于分配优先级。例如,最大值的元素可以被用作最高优先级的元素。我们也可以假设最小值的元素是最高优先级的元素。在其他情况下,我们也可以根据自己的需要设置优先级。

以下是使用链表实现优先队列的函数:

  • push(): 用于将新元素插入队列。
  • pop(): 从队列中移除最高优先级的元素。
  • peep(): 此函数用于在不从队列中移除最高优先级元素的情况下检索它。

优先队列的链表是这样创建的,即最高优先级的元素始终添加到队列的头部。元素根据其优先级按降序排列,因此删除操作需要 O(1) 时间。对于插入操作,我们需要遍历整个列表以找到基于其优先级的合适位置;因此,此过程需要 O(N) 时间。

让我们通过一个例子来理解。

考虑包含元素 2、7、13、15 的以下链表。

Priority Queue using Linked list

假设我们要添加包含值 1 的节点。由于值 1 比其他节点具有更高的优先级,因此我们将节点插入列表的开头,如下所示:

Priority Queue using Linked list

现在,我们需要将元素 7 添加到链表中。我们将遍历列表以插入元素 7。首先,我们将元素 7 与 1 进行比较;由于 7 的优先级低于 1,因此不会在 7 之前插入。元素 7 将与下一个节点进行比较,即 2;由于元素 7 的优先级低于 2,因此不会在 2 之前插入。现在,元素 7 将与下一个元素进行比较,即,由于两个元素具有相同的优先级,因此它们将根据先来先服务的原则进行服务。新元素 7 将在元素 7 之后添加,如下所示:

Priority Queue using Linked list

C 语言实现

输出

Priority Queue using Linked list
下一个主题平衡二叉搜索树