(中央电大)数据结构实验报告1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

国家开放大学实验报告(学科:数据结构)

姓名班级学号实验日期

实验名称:实验一线性表

线性表的链式存储结构

【问题描述】

某项比赛中,评委们给某参赛者的评分信息存储在一个带头结点的单向链表中,编写程序:

(1)显示在评分中给出最高分和最低分的评委的有关信息(姓名、年龄、所给分数等)。

(2)在链表中删除一个最高分和一个最低分的结点。

(3)计算该参赛者去掉一个最高分和一个最低分后的平均成绩。

【基本要求】

(1)建立一个评委打分的单向链表;

(2)显示删除相关结点后的链表信息。

(3)显示要求的结果。

【实验步骤】

(1)运行PC中的Microsoft Visual C++ 6.0程序,

(2)点击“文件”→“新建”→对话窗口中“文件”→“c++ Source File”→在“文件名”中输入“X1.cpp”

→在“位置”中选择储存路径为“桌面”→“确定”,

(3)输入程序代码,

程序代码如下:

#include

#include

#include

#include

#include

#define NULL 0

#define PWRS 5 //定义评委人数

struct pw //定义评委信息

{ char name[6];

float score;

int age;

};

typedef struct pw PW;

struct node //定义链表结点

{struct pw data;

struct node * next;

};

typedef struct node NODE;

NODE *create(int m); //创建单链表

int calc(NODE *h); //计算、数据处理

void print(NODE *h); //输出所有评委打分数据

void input(NODE *s);//输入评委打分数据

void output(NODE *s);//输出评委打分数据

void main()

{

NODE *head;

float ave=0;

float sum=0;

head=create(PWRS);

printf("所有评委打分信息如下:\n");

print(head);//显示当前评委打分

calc(head);//计算成绩

printf("该选手去掉1 最高分和1 最低分后的有效评委成绩:\n");

print(head);//显示去掉极限分后的评委打分

}

void input(NODE *s)

{

printf("请输入评委的姓名: ");

scanf("%S",&s->);

printf("年龄: ");

scanf("%d",&s->data.age);

printf("打分: ");

scanf("%f",&s->data.score);

printf("\n");

}

void output(NODE *s)

{

printf("评委姓名: %8s ,年龄: %d,打分: %2.2f\n",s->,s->data.age,s->data.score); }

NODE *create(int m)

{

NODE *head,*p,*q;

int i;

p=(NODE*)malloc(sizeof(NODE));

head=p;

q=p;

p->next=NULL;

for(i=1;i<=m;i++){

p=(NODE*)malloc(sizeof(NODE));

input(p);

p->next=NULL;

q->next=p;

q=p;

}

return (head);

}

void print(NODE *h)

{ for(int i=1;((i<=PWRS)&&(h->next!=NULL));i++){

h=h->next;

output(h); }

printf("\n");

}

int calc(NODE *h)

{

NODE *q,*p,*pmin,*pmax;

float sum=0;

float ave=0;

p=h->next; //指向首元结点

pmin=pmax=p; //设置初始值

sum+=p->data.score;

p=p->next;

for(;p!=NULL;p=p->next)

{

if(p->data.score>pmax->data.score) pmax=p;

if(p->data.scoredata.score) pmin=p;

sum+=p->data.score;

}

cout<<"给出最高分的评委姓名:"<<<"年龄:"<data.age<<"分值:"<data.score<

cout<<"给出最低分的评委姓名:"<<<"年龄:"<data.age<<"分值:"<data.score<

printf("\n");

sum-=pmin->data.score;

sum-=pmax->data.score;

for (q=h,p=h->next;p!=NULL;q=p,p=p->next)

{

if(p==pmin){q->next=p->next; p=q;}//删除最低分结点

if(p==pmax) {q->next=p->next; p=q;}//删除最高分结点

}

ave=sum/(PWRS-2);

cout<<"该选手的最后得分是:"<

return 1;

}

程序运行结果如下:

相关文档
最新文档