尝试实现优先级队列,使其显示以下内容:
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;
}
该功能似乎适用于介于中间的数字或末尾的数字。 但是,如果插入的数字较小,它似乎总是插入第一个数字之后。
答案 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;
}
我也很自由地清理了您的代码。