C语言链表排序模块错误修复:结构体指针类型错误及结点交换方法
C语言链表排序模块错误修复:结构体指针类型错误及结点交换方法
本文将分析一个C语言链表排序模块中出现的两个常见错误,并提供详细的修改方法和示例代码。
问题:
原始代码中,排序函数sortEmp()存在两个问题:
- 结构体指针类型错误: 函数参数和局部变量
t的类型应该是EMP *,而不是EMP **。 - 结点交换方法错误: 排序过程中应该交换结点的指针,而不是直接交换结点的值。
修改后的代码:
//排序学生结点的函数
void sortEmp()
{
int n = 0, i, j;
EMP *p, *q, *t;
p = h->next;
while (p != NULL) {
n++;
p = p->next;
}
for (i = 0, p = h->next; i < n - 1; i++, p = p->next) {
for (j = i + 1, q = p->next; j < n; j++, q = q->next) {
if (p->age > q->age) {
t = p;
p = q;
q = t;
t = p->next;
p->next = q->next;
q->next = t;
if (h->next == p) {
h->next = q;
t = p;
p = q;
q = t;
} else {
t = h->next;
while (t->next != p) {
t = t->next;
}
t->next = q;
}
}
}
}
printf("Sort success!\n");
}
代码解释:
- 结构体指针类型修正: 修改了
t的类型为EMP *,使其指向一个结点。 - 交换结点指针: 通过指针交换,修改了结点之间的连接关系,从而实现了排序功能。
总结:
本文分析了C语言链表排序模块中常见的错误,并给出了详细的修改方法和代码解释。在使用链表进行排序时,要注意结构体指针类型和结点交换方法,确保代码逻辑正确,才能实现预期的排序功能。
相关链接:
原文地址: https://www.cveoy.top/t/topic/orhF 著作权归作者所有。请勿转载和采集!