已知 first 为单链表的表头指针,链表中存储的都是整型数据,试写出实现下列运算的递归算法:
(1)求链表中的最大整数:
(2)求链表的结点个数。
(3)求链表中所有元素的平均值。
运行截图:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define OK 1
#define ERROR -1
#define OVERFLOW -2
typedef int status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
status InitList (LinkList &L)
{
L = new LNode;
L->next = NULL;
return OK;
}
status AssigList(LinkList &L)
{
LinkList p,t;
p = L;
int e = 1;
printf("请输入要插入的值以00结束:");
while(e)
{
scanf("%d",&e);
if(e == 00)
break;
t = new LNode;
t ->data = e;
t ->next = NULL;
p->next = t;
p = t;
}
return OK;
}
status Max(LinkList &L)
{
int m;
if(!L->next)
return L->data;
m = Max(L->next);
return m >= L->data?m:L->data;
}
status Length(LinkList &L)
{
if(!L->next)
return 1;
else
return Length(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);
AssigList(L);
m = Max(L->next);
printf("最大值是:%d\n",m);
m = Length(L->next);
n = m;
printf("结点个数:%d\n",m);
a = Average(L->next,n);
printf("平均值为:%f\n",a);
return 0;
}