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");
}

代码修改说明

  1. 使用双层循环遍历链表,外层循环控制比较的次数,内层循环控制比较的范围。
  2. 每次循环比较相邻的两个结点,如果前一个结点的年龄大于后一个结点的年龄,则交换两个结点的位置。
  3. 在交换结点时,需要调整指针位置,以确保链表的完整性。
  4. 最后打印排序成功的提示信息。

通过以上修改,可以有效解决原代码中排序算法错误的问题,并实现按年龄对学生结点进行排序的功能。

C语言学生信息管理系统:链表排序算法优化

原文地址: https://www.cveoy.top/t/topic/orhL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录