gpt4 book ai didi

C-插入排序链表

转载 作者:行者123 更新时间:2023-11-30 19:49:18 26 4
gpt4 key购买 nike

下面是我使用链表代码进行插入排序。我已经像其他人一样对此进行了调试,但不知道如何对其进行排序。现在,它进入无限循环,进入 insert() 中的 if 语句。我需要改变什么?

//Sort function to call insertion sort function
void sortEmps()
{
temp = NULL;
struct EMP* next = top;

while(top != NULL)
{
next = top -> next;
insert(temp);
temp = next;
}

top = temp;
}

//Insertion sort function
void insert(struct EMP *emp)
{
prev = NULL;
current = temp;

while (current != NULL && current->id < emp->id)
{
prev = current;
current = current->next;
}

if (prev == NULL)
{
temp = emp;
}
else
{
emp -> next = prev -> next;
prev -> next = emp;
}
}

这是我的结构和添加函数。几乎是排序之前唯一使用的东西。我能够初始化一群员工,因此它们被存储。

 typedef struct EMP
{
int id;
char name [MAX];
double salary;
struct EMP* next;

} EMPLOYEE;
int addEmployee(char* name, double salary)
{
struct EMP* emp = createEmployee(name, salary);
emp -> next = top;
top = emp;

numEmps++;
//employees[numEmps++] = emp;
return TRUE;
}

最佳答案

想想如果你尝试插入现有列表和 current->id > emp->id 会发生什么(你永远不会进入 while 循环并且你的 prev == null,所以通过将指向列表头部的指针更改为指向其他东西,结果会丢失内存中未释放的列表,您正在玩​​火。

顺便说一句:它与您的插入排序无关

我不会在这里给你写这种类型代码的正确方法,你可以在网上找到足够的信息。

一些建议,放松你的全局指针,并阅读如何设计一个支持简单插入和从头部删除的链接列表(它可能会说明你应该使用的另一种结构)

关于C-插入排序链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com