#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;
}
Я взял на себя смелость также немного почистить ваш код.