最低优先级之前不会排队列表优先级队列

时间:2020-09-16 21:02:33

标签: c

尝试实现优先级队列,使其显示以下内容:

   A  B     C  D
0  1  2   red  1
1  4  5  blue  5
2  7  6   red  7

我正在使用以下函数来加入链接列表:

OUTPUT:
Before Insertion: 4, 5
After Insertion: 2, 4, 5, 7

但是,当使用它来获取输出时,我却得到了以下内容:

void Enqueue(Node* head, int d){
    Node* start = (head);
    Node* temp = malloc(sizeof(Node));
    temp->data = d;
    if(head->data > d){
        temp->next = head;
        head = temp;
    }
    else{
        while (start->next != NULL && start->next->data < d) {
            start = start->next;
        }
    }
    temp->next = start->next;
    start->next = temp;

}

该功能似乎适用于介于中间的数字或末尾的数字。 但是,如果插入的数字较小,它似乎总是插入第一个数字之后。

1 个答案:

答案 0 :(得分:2)

您的函数实际上不会更改优先级队列的头指针。不能,因为您按值传递了head。相反,您应该传递一个指向它的指针:

void Enqueue(Node** head, int d){
    Node* temp = malloc(sizeof(Node));
    temp->data = d;

    if ((*head)->data > d) {
        temp->next = *head;
        *head = temp;
        return;
    }

    Node* start = *head;

    while (start->next && start->next->data < d) {
        start = start->next;
    }

    temp->next = start->next;
    start->next = temp;
}

我也很自由地清理了您的代码。