栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构:用递归函数求链表各节点和的平均值(C语言实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构:用递归函数求链表各节点和的平均值(C语言实现)

设计一个函数double getaverage(List f, int *nodenum) 
已知f为一个不带头结点单向链表的头指针,链表结点数据结构如下所示,使用递归函数,求出所有结点中数值的平均数。 nodenum为结点数的输出参数,返回平均数,如果为空链表,则返回0。
List的结构如下:
typedef struct T_Node{
    int d;
    struct T_Node *next;
} Node, *List;
createlink函数如下:
void createlink(List *pf)
{
    int i;
    Node *p;

    *pf = (Node *)malloc(sizeof(Node));
    p = *pf;
    for(i = 1; i <= 99; i++)
    {
        p->d = i;
        p->next = (Node *)malloc(sizeof(Node));
        p = p->next;
    }
    p->d = 100;
    p->next  = NULL;
}

main函数如下:
int main()
{
    int n;
    List f;
    double a;
    createlink(&f);
    a = getaverage(f, &n);
    printf("%d  %lfn",n, a);
    return 0;
 }
函数getaverage如下:

double getaverage(List f, int *nodenum)
{
	
	double temp;              
	if(f==NULL)               
	{
		(*nodenum)=0;
		return 0;
	}
	else
	{
		temp=getaverage(f->next,nodenum);    
		return (temp*(*nodenum)+f->d)/(++(*nodenum));	 
	}
}
    

整体代码如下:

#include
#include

typedef struct T_Node{
	int d;
	struct T_Node *next;
} Node, *List;

void createlink(List *pf)
{
	int i;
	Node *p;

	*pf = (Node *)malloc(sizeof(Node));
	p = *pf;
	for(i = 1; i <= 99; i++)
	{
		p->d = i;
		p->next = (Node *)malloc(sizeof(Node));
		p = p->next;
	}
	p->d = 100;
	p->next  = NULL;
}

double getaverage(List f, int *nodenum)
{
	
	double temp;
	if(f==NULL)
	{
		(*nodenum)=0;
		return 0;
	}
	else
	{
		temp=getaverage(f->next,nodenum);
		return (temp*(*nodenum)+f->d)/(++(*nodenum));	 
	}
}

int main()
{
	int n;
	List f;
	double a;
	createlink(&f);
	a = getaverage(f, &n);
	printf("%d  %lfn",n, a);
	return 0;
 }

 运行结果:

小结:

就我个人来说的话,我是不太喜欢用递归算法的。当然在有些情况下递归算法会很简洁,但能用递归解决的问题,用循环基本上都可以解决。而递归算法可能出现许多不可预知的错误,不容易检查出来。

就这道题目而言,最核心的问题,莫过于解决当f不是空链表时的返回值。如果可以熟练掌握栈的话,应该知道,递归算法实际上就是栈。当当前结点不为空的话,会一直向下一个结点运算,直至为空,然后从最后一个结点逐级返回。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832604.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号