C语言链表排序模块错误修复:结构体指针类型错误及结点交换方法

本文将分析一个C语言链表排序模块中出现的两个常见错误,并提供详细的修改方法和示例代码。

问题:

原始代码中,排序函数sortEmp()存在两个问题:

  1. 结构体指针类型错误: 函数参数和局部变量 t 的类型应该是 EMP *,而不是 EMP **
  2. 结点交换方法错误: 排序过程中应该交换结点的指针,而不是直接交换结点的值。

修改后的代码:

//排序学生结点的函数
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");
}

代码解释:

  1. 结构体指针类型修正: 修改了 t 的类型为 EMP *,使其指向一个结点。
  2. 交换结点指针: 通过指针交换,修改了结点之间的连接关系,从而实现了排序功能。

总结:

本文分析了C语言链表排序模块中常见的错误,并给出了详细的修改方法和代码解释。在使用链表进行排序时,要注意结构体指针类型和结点交换方法,确保代码逻辑正确,才能实现预期的排序功能。

相关链接:

C语言链表排序模块错误修复:结构体指针类型错误及结点交换方法

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

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