#include<stdio.h>
#include<stdlib.h>
#define M 20
#define N 3
typedef struct
{
char name[M];
int age;
float score;
}Judge;
typedef struct cmpt
{
Judge data;
struct cmpt *next;
}competitor;
void input(competitor *head,int n);
competitor *max1(competitor *L);
competitor *min1(competitor *L);
void delete_score(competitor *L,float score);
float average(competitor *L);
void printL(competitor *L);
void input(competitor *L,int n)
{
competitor *p1,*p2;
int i=1;
L->next=p1=p2=(competitor *)malloc(sizeof(competitor));
printf("Please input name age score:\n");
scanf("%s",p1->data.name);
scanf("%d",&p1->data.age);
scanf("%f",&p1->data.score);
while(i<n)
{
p1=(competitor *)malloc(sizeof(competitor));
p2->next=p1;
p2=p1;
scanf("%s",p1->data.name);
scanf("%d",&p1->data.age);
scanf("%f",&p1->data.score);
i++;
}
p2->next=NULL;
}
competitor *max1(competitor *L)
{
float max_score;
competitor *q=L,*p=L->next;
max_score=p->data.score;
do
{
if(max_score<p->data.score)
{
max_score=p->data.score;
q=p;
}
p=p->next;
}while(p!=NULL);
return q;
}
competitor *min1(competitor *L)
{
float min_score;
competitor *q=L,*p=L->next;
min_score=p->data.score;
do
{
if(min_score>p->data.score)
{
min_score=p->data.score;
q=p;
}
p=p->next;
}while(p!=NULL);
return q;
}
void delete_score(competitor *L,float score)
{
competitor *q=L,*p=L->next;
int i=1,index=1;
do{
if(score!=p->data.score)
{
p=p->next;
index++;
}
else
{
while(i++<index)
q=q->next;
q->next=p->next;
free(p);
break;
}
}while(p!=NULL);
}
float average(competitor *L)
{
float ave=0; int i=0;
competitor *p=L->next;
if(p!=NULL)
do{
ave=ave+p->data.score;
p=p->next;
i++;
}while(p!=NULL);
ave=ave/i;
return ave;
}
void printL(competitor *L)
{
competitor *p=L->next;
if(p!=NULL)
do
{
printf("%s,%d,5f\n",p->data.name,p->data.age,p->data.score);
p=p->next;
}while(p!=NULL);
}
int main()
{
competitor *L,*max_s,*min_s;
int n;
printf("请输入评委的人数:\n");
scanf("%d",&n);
L=(competitor *)malloc(sizeof(competitor));
L->next=NULL;
input(L,n);
printL(L);
max_s=max1(L);
min_s=min1(L);
printf("最大值的节点的评委信息为:姓名:%s 年龄:%d 所给的分数为:%f\n",max_s->data.name,max_s->data.age,max_s->data.score);
printf("最小值的节点的评委信息为:姓名:%s 年龄:%d 所给的分数为:%f\n",min_s->data.name,min_s->data.age,min_s->data.score);
delete_score(L,max_s->data.score);
delete_score(L,min_s->data.score);
printf("删除最大值和最小值后的数据为:\n");
printL(L);
printf("平均分为:%f\n",average(L));
getchar();
getchar();
return 0;
}