【发布时间】:2013-08-13 23:07:22
【问题描述】:
我想使用链表创建一个队列。 有很多算法可以做到这一点。但我很好奇的是如何制作相对优先级队列。
也许这种类型的队列有一个特殊的名称,但我不知道,而且我没有任何运气在谷歌上搜索解决方案。
无论如何,假设我有这个结构,它将代表我列表的节点。
struct Node {
int value;
Node* next;
}
如果我想创建一个优先级队列(其中值最小的元素是第一个),当我插入例如 5 7 1 8 2 时,我的列表应该如下所示:
1 -> 2 -> 5 -> 7 -> 8
实现这一点并不难。 我想要做的是 - 当我插入第一个元素时,其他元素应该具有相对于前一个元素的值。因此,在我的示例中,列表/队列将包含以下值:
1 -> 1 -> 3 -> 2 -> 1
我不确定我将如何实现它?以下想法是否适用:
在节点结构中,我添加了另一个字段,它代表原始值。 我找到了我要插入的节点的位置,就像我在创建普通链表时所做的那样,然后我就说
temp->value = temp->originalValue - previous->originalValue;
【问题讨论】:
-
您提出的解决方案似乎很合理。
-
@NateKohl 他提出的解决方案被破坏了 - 他需要修改“上一个”和“下一个”节点才能使其工作,它只是......丑陋。为什么需要这种数据结构?
-
@NikBougalis:啊,对。
-
@NikBougalis:我想它可以用来紧凑地表示一长串递增的数字(如素数)。
-
@Nicholas:Google for 计时器轮。它解决了这个问题。不过,一般来说,您的时间结构应该使用绝对时间值来表示到期。然后,您只需检查到期值小于当前时间的计时器。然后,唯一的另一个问题是为您的时间使用单调时钟。
标签: c++ c algorithm list queue