C语言 我怎样才能使这个代码更小,没有3个循环?我应该找到3个得分最低的学生

ss2ws0br  于 2022-12-22  发布在  其他
关注(0)|答案(1)|浏览(128)

我得做我的实验))一般来说,我应该找出评分最小的三个学生的指数,没有三个循环我怎么能做到呢?只需要一个就行了。在这个函数中,我使用了结构和输出参数。

int addDelateThree(stud** pListHead, int* Imin, int* Jmin, int* Cmin) {
    stud* pTemp = pListHead;
    stud* SpTemp = pListHead;
    stud* TpTemp = pListHead;
    int check = 0;
    double min1 = pTemp->madian;
    double min2 = SpTemp->madian;
    double min3 = pTemp->median;

    int i = 0;
    while (pTemp != NULL) {
        if (min1 > pTemp->madian) {
            min1 = pTemp->madian;
            *Imin = i;
        }
        i++;
        pTemp = pTemp->next;
    }

    i = 0;
    while (SpTemp != NULL) {
        if (min2 > SpTemp->madian && i != *Imin) {
            min2 = SpTemp->madian;
            *Jmin = i;
        }
        i++;
        SpTemp = SpTemp->next;
    }

    i = 0;

    while (TpTemp != NULL) {
        if (min3 > TpTemp->madian && i != *Imin && i != *Jmin) {
            min3 = TpTemp->madian;
            *Cmin = i;
        }
        i++;
        TpTemp = TpTemp->next;
    }
}
am46iovg

am46iovg1#

1.创建一个包含3个stud *的列表。初始化all以指向一个虚拟记录,该记录的.madian = INFINTY;
1.遍历链接列表一次。
比较节点的.madianlist[2]->madian。如果<=,则使用新的最小值.madian调整3的列表。这可能涉及多次比较,因为代码首先比较最大的最小值,然后比较下一个最大的最小值,最后比较最小值。
1.报告结果。
O(n)解。

相关问题