c - C语言中如何实现优先级队列?

标签 c data-structures linked-list priority-queue

我需要使用单链表在 C 编程中实现一个优先级队列。

我对优先级队列不是很清楚。我用谷歌搜索但没有完全理解我发现了什么。我的理解是优先级队列是一个队列,其元素按优先级排序。列表中的插入根据元素优先级定位在列表中。

比方说,我们有以下场景。 (注意:我认为,更高的值(value)对应更高的优先级):

Element-->2 (priority=2)  (Now in position 0)

如果需要插入另一个元素,则说 Element-->3 (priority=3) 具有更高的优先级。

我可以移动前一个元素 Element-->2 (priority=2),然后插入这个新的 Element-->3 (priority=3)位置 0 和 Element-->2 (priority=2) 移动到列表中的位置 1。

现在列表变成了,

Element-->3 (priority=3) followed by Element-->2 (priority=2)

同样的,在插入的基础上,我是不是要把列表中的所有元素都移位?

这是正确的吗?

最佳答案

您不必“移动”列表,而是在插入时执行如下操作(伪代码):

if new_node.priority > list.head.priority:
    new_node.next = list.head
    list.head = new_node
else:
    previous = null
    for current = list.head:
        if current.priority < node.priority:
            previous.next = node
            node.next = current
            break loop
        previous = current

如果您的列表有一个指向末尾的指针,您也可以为低于末尾的优先级添加特殊检查。

关于c - C语言中如何实现优先级队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8253889/

相关文章:

java - 有序双向链表//java

c - 打印链接列表仅打印 C 中最新的数据条目

c - strcat() 函数实际上是如何工作的及其替代方法

c++ - 如何将 libusb 与 libevent 一起使用?

c - 在适用于 ARM Cortex M4f 的 Code Composer studio 中将堆栈指针的值保存在 C 变量中

java - 带有 HashMap 的 ArrayList 与带有 Class 的 ArrayList

algorithm - AA 树在插入顺序上稳定吗?

c - 如何进行百万级词典搜索**(非英语)**

c++ - std::vector 以外的排名保持数据结构?

Java:包含原始对象引用的对象内部的对象引用