C中优先级队列中的小混淆

时间:2017-11-09 04:38:43

标签: c data-structures priority-queue

我写了这样的代码:

ptr=front;
    while(ptr->link!=NULL && ptr->priority<itempriority ){
        ptr=ptr->link;
    }

    temp->link=ptr->link;
    ptr->link=temp;
    return front;

上述代码不起作用。

  ptr=front;
        while(ptr->link!=NULL && ptr->link->priority<itempriority ){
            ptr=ptr->link;
        }

        temp->link=ptr->link;
        ptr->link=temp;
        return front;

此代码完美无缺。

我很困惑为什么我的代码无效,即ptr->priority<itempriority

简而言之,我想知道ptr->link->priority<itempriorityptr->priority<itempriority不是这样的情况下如何正常运作?

1 个答案:

答案 0 :(得分:4)

考虑一下

1 -> 2 -> 5 -> 8

并且您希望将3插入正确的位置

while(ptr->link!=NULL && ptr->priority<itempriority ){
        ptr=ptr->link;
    }

最后,ptr将指向5。最后您将拥有

1 -> 2 -> 5 -> 3 -> 8 //Wrong

第二个版本

while(ptr->link!=NULL && ptr->link->priority<itempriority ){
            ptr=ptr->link;
        }

最后ptr将是2,最后是

1 -> 2 -> 3 -> 5 -> 8 //correct