下面是我使用链表代码的插入排序。我调试了这个没有其他,但无法弄清楚如何使它排序。正如它现在所处,它进入无限循环进入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;
}
}
这是我的struct和add函数。几乎是排序之前使用的唯一东西。我能够初始化一大堆员工,因此他们被存储起来。
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;
}
答案 0 :(得分:0)
想想如果您尝试插入现有列表并且当前 - &gt; id&gt;会发生什么emp-&gt; id(你永远不会进入while循环而你的prev == null,所以通过改变指向列表头部的指针指向别的东西,结果在内存中的某个地方丢失你没有被处理的列表,你正在玩火。
btw:它与您的插入排序无关
我不会在这里写下你写这种类型代码的正确方法,你可以在网上找到足够的信息。
几点建议,松开你的全局指针,并阅读如何设计一个支持从头部轻松插入和删除的链表(它可能会说明你应该使用的另一个结构)