我想使用链表创建一个队列。有很多算法可以做到这一点。但我很好奇的是如何制作相对优先级队列。
也许这种类型的队列有一个特殊的名称,但我不知道,而且我没有任何运气在谷歌上搜索解决方案。
无论如何,假设我有这个结构,它将代表我列表的节点。
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;