C语言学生信息管理系统:链表排序算法优化
C语言学生信息管理系统:链表排序算法优化
该代码实现了一个简单的学生信息管理系统,使用链表存储学生信息。其中排序模块存在问题,原代码使用的排序算法有误,应该使用更合适的排序算法,例如冒泡排序或快速排序。
问题所在
原代码中的排序函数使用了一种错误的排序算法,无法正确对链表中的学生结点进行排序。
修改方案
建议使用冒泡排序算法对链表中的学生结点按年龄进行排序。冒泡排序算法通过比较相邻的两个结点,并将较大的结点交换到后面,最终将最大的结点移动到链表的末尾。
修改后的代码:
//排序学生结点的函数
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 = 0, q = h->next; j < n - i - 1; j++, q = q->next) {
if (q->age > q->next->age) {
//交换节点
t = q->next;
q->next = t->next;
t->next = q;
if (q == h->next) {
h->next = t;
} else {
p->next = t;
}
q = t; //调整指针位置
}
if (p != NULL && p->next != NULL) {
p = p->next;
}
}
}
printf("Sort success!\n");
}
代码修改说明
- 使用双层循环遍历链表,外层循环控制比较的次数,内层循环控制比较的范围。
- 每次循环比较相邻的两个结点,如果前一个结点的年龄大于后一个结点的年龄,则交换两个结点的位置。
- 在交换结点时,需要调整指针位置,以确保链表的完整性。
- 最后打印排序成功的提示信息。
通过以上修改,可以有效解决原代码中排序算法错误的问题,并实现按年龄对学生结点进行排序的功能。
原文地址: https://www.cveoy.top/t/topic/orhL 著作权归作者所有。请勿转载和采集!