Cのような言語-再帰的に、単一リンクリストのノードの数、最大値、平均値を検索します

このコードは正常に動作します!

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100  //定义最大数量;
typedef int ElemType;
typedef struct LNode  //定义链表:数据域,指针域
{
	ElemType data;   
	struct LNode *next;
}LNode,*LinkList;

enum Status{ERROR,OK};   //本代码采用枚举类型,此处可以自由设定

//链表初始化
Status InitList (LinkList  &L)
{
	L=(LinkList)malloc(sizeof(LNode));//L=new LNode;也可
	if(L==NULL)
		return ERROR;
	L->next = NULL;
	return OK;
}

//构造链表,插入数字
Status CreateList(LinkList &L)  //这个链表有头结点
{
	LinkList p=L,r;
	int e = 1;
	printf("请输入要插入的值以000结束:");
	while(e)
	{
		scanf("%d",&e);
		if(e == 00)
			break;
		r= new LNode;
		r->data = e;
		r->next = NULL;
		p->next = r;
		p = r;
	}
	return OK;

}
//求链表中最大值
int Max(LinkList L)
{
	int m;
	if(!L->next)  //若只有一个结点
		return L->data;
	
	m = Max(L->next);
	return m>=L->data?m:L->data;
	
}

//求链表结点个数---递归
int Num(LinkList L)
{
	if(!L->next)
		return 1;
	else 
		return Num(L->next)+1;
}

//求平均值--注意函数类型为浮点型中的双精度
double Average(LinkList &L,int n)
{
	double a;
	if(!L->next)  //如果就一个结点的话,数据域就是平均值
		return L->data;
	else 
	{
		a = Average(L->next,n-1);
		return (a*(n-1)+L->data)/n;
	}
}

int main()
{
	int m,n;
	double a;
	LinkList L;
	InitList(L);  //初始化
	CreateList(L);
	m=Max(L->next); //因为有头结点
	printf("最大值是:%d\n",m);

	m=Num(L->next);  //因为有头结点
	n=m;
	printf("结点个数:%d\n",m);

	a=Average(L->next,n);
	printf("平均值为:%f\n",a);
	return 0;
}

	

公開された57件の元の記事 気に入りました54 訪問2336

おすすめ

転載: blog.csdn.net/September_C/article/details/105484764