Очередь приоритетов связанного списка не ставится в очередь перед самым низким приоритетом

#c

#c

Вопрос:

Попытка реализовать очередь приоритетов таким образом, чтобы она отображала следующее:

 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 amp;amp; start->next->data < d) {
            start = start->next;
        }
    }
    temp->next = start->next;
    start->next = temp;

}
  

Однако, используя это для получения выходных данных, я получаю следующее:

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

  

Функция, похоже, работает для чисел между ними или чисел в конце.
Но, похоже, он всегда вставляется после первого числа, если вставленное число меньше.

Комментарии:

1. Вы передаете параметр функции head как значение. Функция видит копию значения, которое передает вызывающий объект. Если вы хотите изменить значение вне функции, вы должны передать указатель на Node* .

Ответ №1:

Ваша функция фактически никогда не изменяет указатель заголовка вашей очереди приоритетов. Это невозможно, потому что вы передаете 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 amp;amp; start->next->data < d) {
        start = start->next;
    }

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

Я взял на себя смелость также немного почистить ваш код.