C/C++中的优先队列介绍

2023年 9月 13日 64.1k 0

优先级队列是一种队列,其中根据分配给它们的优先级插入或删除元素,其中优先级是范围在 0-10 之间的整数值,其中 0 表示具有最高优先级的元素,10 表示具有最高优先级的元素优先级最低的元素。实现优先级队列遵循两条规则:

  • 具有最高优先级的数据或元素将在具有最低优先级的数据或元素之前执行。
  • 如果两个元素具有相同的优先级,则它们将按照它们添加到列表中的顺序执行。

有多种可用的数据结构可用于实现优先级队列如堆栈、队列和链表。在本文中,我们将解释队列数据结构。有两种方法可以用来实现优先级队列,例如 -

  • 在单个数组中维护多个优先级的队列

    一种方法实现优先级队列就是为每个优先级维护一个队列。我们可以将这些多个队列存储在一个数组中,其中每个队列都有两个指针,即 Front 和 Rear。在队列中,Front指针用于向队列中插入元素,每当插入元素时它就加1;另一个指针是rear指针,用于从队列中删除或移除元素,每当元素插入时它就减1被从队列中删除。最后,通过两个指针的位置我们还可以确定队列中元素的数量。

C/C++中的优先队列介绍

注意 - 如果每个队列的大小相同,那么我们可以创建一个二维数组,而不是创建多个一维数组维数组。

优先级队列插入操作算法

insert(queue, data, priority)
If(queue->Rear[priority] = MAX-1 AND queue->Front[priority] = 0) OR (queue->Rear[priority] +1 =queue->Front[priority])
Print Overflow
End
IF queue->Rear[priority - 1] = MAX-1
Set queue->Rear[priority - 1] = 0
Else
Set queue->Rear[priority] = queue->Rear[priority - 1] +1
End
Set queue->CQueue[priority - 1] [queue->Rear[priority - 1] = data
IF queue->Front[priority - 1] = -1
Set queue->Front[priority - 1] = 0
End

登录后复制

优先级队列中插入操作的算法

delete(queue)
Set flag = 0, priority = 0
While priority Front[priority] = -1
Set flag = 1
Set value = queue->CQueue[priority][queue->Front[priority]]
IF queue->Front[priority] = queue->Rear[priority]
Set queue->Front[priority] = queue->Rear[priority] = -1
Else
IF queue->Front[priority] = MAX-1
Set queue->Front[priority] = 0
Else
Set queue->Front[priority] = queue->Front[priority] + 1
End
End
Break
End
Set priority = priority +
End
If flag = 0
Print underflow
Else
Return value
End

登录后复制

以上就是C/C++中的优先队列介绍的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论