此代码可以正常运行!
#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;
}