c链表中的优先级队列

时间:2016-03-20 21:19:56

标签: c

我已经为优先队列创建了这个程序,我遇到了问题。我得错了输出。

这是输入:

Insert 10000 2
Insert 10000 2
Insert 10000 3
Insert 19444 9
Pop
Insert 10331 3
Pop
Pop
Pop
Pop
Pop

这是输出应该是什么:

19444
10000
10331
10000
10000
-1

这是我得到的输出:

19444
10000
10000
10000
10331
-1

已解决!

2 个答案:

答案 0 :(得分:0)

我认为您的优先级检查逻辑不正确:

while (queue->next != NULL && queue->next->prior >= /* not <= */ priorty)

或更好

while (queue->next != NULL && priorty <= queue->next->prior)

不确定您打算如何处理两个元素具有相同优先级的情况,但由于您的插入使用“大于”来替换队列的头部,因此您可能希望保持相同的逻辑。

答案 1 :(得分:0)

你插入节点的循环不正确,应该是:

while (queue->next != NULL && queue->next->prior >= priorty)
   queue = queue->next;