设有一个带头结点的链表,存储结构为
Typedef struct Node
{
ElemType data;
Struct Node *next;
}linklist;
其中data为整形数域,next为指针域,编写函数将带头结点的单链表L中的所有数据元素的平均值,请将double average(linklist *head)功能补充完整,最后输出结果要求保留两位小数.
#include<stdio.h>
#include<stdlib.h>
#define ok 1
#define error 0
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}linklist;
linklist *initlist()
{
linklist *head;
head=(linklist *)malloc(sizeof(linklist));
head->next=NULL;
return head;
}
linklist *createlist(int n)
{
int i;
linklist *head,*p,*r;
head=(linklist *)malloc(sizeof(linklist));
r=head;
for(i=1;i<=n;i++)
{
p=(linklist *)malloc(sizeof(linklist));
scanf("%d",&(p->data));
r->next=p;
r=p;
}
r->next=NULL;
return head;
}
double average(linklist *head)
{
double sum=0,i=0;
linklist *p;
p=head->next;
while(p!=NULL){
sum+=(p->data);
p=p->next;
i++;
}
sum=sum/i*1.0;
return sum;
}
int main(void)
{
linklist *L;
int i,n;
double ave;
scanf("%d",&n);
initlist();
L=createlist(n);
ave=average(L);
printf("%.2lf",ave);
}