【问题标题】:Priority queue implementation in CC中的优先级队列实现
【发布时间】:2010-04-10 16:08:15
【问题描述】:

C 是否有任何可靠且简单的优先级队列(首选链表,不是必需的)实现?

更一般地说,您使用哪些 C 标准库?

【问题讨论】:

  • 为什么说“什么标准库?”
  • 我喜欢在二项式堆上实现我的 PQ。

标签: c


【解决方案1】:

PQLib(当前接受的答案)不完整并且功能与本文发布时的文档不匹配。例如,pq_dequeue 文档说它返回一个条目。实现返回 NULL。代码中有很多“TO DO”cmets,例如“从其堆中删除包含最高优先级条目的节点”。缺少基本逻辑。

对于任何寻找优先级队列的人:我建议找到一些具有良好、通过单元测试的代码。我不推荐 PQLib,除非它已更新并包含测试。

致 PQLib 的所有者或任何推荐它的人:我认为这段代码是完整的,并花了相当多的时间调试,直到我意识到它不是,这令人沮丧。请不要推荐您没有尝试过或知道正在开发的代码。

【讨论】:

  • 是的,只是浪费了一个小时——应该多读一点这个帖子!
【解决方案2】:

伴随Robert SedgewickAlgorithms in C, Parts 1-4 (Fundamental Algorithms, Data Structures, Sorting, Searching)source code 包含基于堆和基于列表的实现。请参阅第 9 章 - 优先级队列和堆排序。

【讨论】:

    【解决方案3】:

    我有一个用 C 语言编写的优先级队列,托管在谷歌代码上。麻省理工学院许可

    https://code.google.com/p/pqueue-heap-c/source/browse/trunk/pqueue.cpp

    代码已经在几个项目中使用过,所以它很可靠,但我是在 98 年写的,所以我不记得如何使用它了。不要被 cpp 扩展所误导。是纯C。

    【讨论】:

    • 哪些项目使用了你的代码?感谢您制作和分享这个!
    • 不客气@Darakian 我在 90 年代后期很久以前在一个视频游戏中的一些寻路代码中使用了它。
    • 你不能分享哪个游戏可以吗?
    • 这段代码或至少一个类似的版本曾在名为蝙蝠侠和罗宾的 Playstation 游戏中使用过,我还在 A* 算法实现中使用过它,但后来我将它重写为C++ 和使用 STL 的内置优先级队列。
    【解决方案4】:

    查看PQLib

    我使用标准 C 标准库。 ;)

    【讨论】:

    • 请,请,请仔细阅读 PQLib 中的 LICENSE 文件非常。它重新引入了一种全新的广告条款(甚至比原来的 BSD 广告条款还要糟糕),并且与 GPL/LGPL(所有版本)不兼容。基本上,您不能链接 glibc 和 PQLib 并合法分发最终产品。该库绝对不是开源的,更不用说免费软件了。
    • @Tim 我没有意识到......它说的是 BSD,但它们一定是指特殊的 BSD。 +1
    • 不要使用 PQLIB。它不完整且不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多