原文:

优先级队列是的扩展,具有以下属性。

  1. 每个项目都有一个相关的优先级。
  2. 优先级高的元素在优先级低的元素之前出队。
  3. 如果两个元素具有相同的优先级,则根据它们在队列中的顺序提供服务。

在下面的优先级队列中,具有最大 ascii 值的元素将具有最高优先级。

典型的优先级队列支持以下操作。 插入(项目,优先级):插入具有给定优先级的项目。 获取最高优先级():返回最高优先级的项目。 删除最高优先级():删除最高优先级的项目。

如何实现优先级排队? *使用数组:* 一个简单的实现就是使用数组的如下结构。

struct item {
   int item;
   int priority;
}

insert()操作可以通过在 o(1)时间内在数组末尾添加一个项来实现。

gethighestpriority()操作可以通过线性搜索数组中优先级最高的项来实现。这个操作需要 o(n)个时间。

deletehighestpriority()操作可以通过首先线性搜索一个项目,然后通过将所有后续项目向后移动一个位置来移除该项目来实现。

我们也可以使用链表,链表所有操作的时间复杂度和数组一样。链表的优点是 deletehighestpriority()可以更有效,因为我们不必移动项目。

使用堆: 堆通常是优先队列实现的首选,因为堆比数组或链表提供更好的性能。在二进制堆中,gethighestpriority()可以在 o(1)时间实现,insert()可以在 o(logn)时间实现,deletehighestpriority()也可以在 o(logn)时间实现。 借助,insert()和 gethighestpriority()可以在 o(1)摊销时间内实现,deletehighestpriority()可以在 o(logn)摊销时间内实现。

优先级队列的应用: 1) cpu 调度 2)像等图形算法 3)所有涉及优先级的。

优先级队列是使用堆实现的。关于pg电子试玩链接自己的实现和库实现,请参考下面的文章。

有用链接:

参考文献:

如果你发现任何不正确的地方,或者你想分享更多关于上面讨论的话题的信息,请写评论。