2 bsj1995 BSJ1995 于 2016.03.23 14:42 提问

实现以下对单链表的操作,要求单链表一次遍历效率(数据结构c++) 10C

double averageExceptMaxMin(SinglyList &list) ​//去掉最高分和最低分,再求平均值

2个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.23 15:19

基本思路就是,遍历一遍,然后累加每个data值到sum_num上,然后比较每个值和最大值和最小值,如果比最大值大,那么更新最大值,
比最小值小,那么更新最小值,并且记录一共有几个结点,最后return的时候减去最大最小值,数量也减2

 double averageExceptMaxMin(LinkList &list)
{
    LinkList p = list->next;
    double max_num, min_num, sum_num = 0.0;//分别记录最大值,最小值,总数
    max_num = p->data;//将第一个结点的值作为最开始的最大值
    min_num = p->data;//将第一个结点的值作为最开始的最小值
    int i = 0;//记录结点个数
    while (p != NULL)
    {
        sum_num += p->data; //累加data值
        if(p->data > max_num)//比较是否大于最大值
            max_num = p->data;
        else if(p->data < min_num)//比较是否小于最大值
            min_num = p->data;
        p = p->next;//移到下一个结点
        i++;//结点个数+1
    }
    //减去最大值和最小值,个数也要减2
    return (sum_num - min_num - max_num) / (i - 2);
}

图片说明

tanjunchen
tanjunchen   2016.03.24 00:09

思路不错,楼上,就是查找然后叠加,最后求值

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!