数据结构实验报告一

  • 格式:doc
  • 大小:117.00 KB
  • 文档页数:13

数据结构实验报告(一) 1 实验报告(一) 分校名称 学号 姓名 实验日期

专业名称 计算机科学与技术 课程名称 数据结构 批改教师 主持教师 实验成绩 校外评阅教师

实验名称 线性表 使用主要设备 PC, VC++6.0 实验要求 1.掌握线性表的存储结构及相关的操作; 2.能根据问题要求,设计数据结构和相应算法; 3.用C语言编制程序,程序中写出详细注释; 4.给出测试结果,验证程序的正确性。 实验报告内容:

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

(1)显示在评分中给出最高分和最低分的评委的有关信息(姓名、年龄、所给分数等) (2)在链表中删除一个最高分和一个最低分的结点 (3)计算该参赛者去掉一个最高分和一个最低分后的平均成绩 数据结构实验报告(一) 2

 程序代码如下: //数据结构实验1.1线性表的链式存储结构 //调试环境: Visual C++ 6.0 //-----库文件的预设和定义 #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; 数据结构实验报告(一) 3

}; 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);//显示去掉极限分后的评委打分 数据结构实验报告(一) 4

} void input(NODE *s) { printf("请输入评委的姓名: "); scanf("%S",&s->data.name); 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->data.name,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; 数据结构实验报告(一) 5

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; 数据结构实验报告(一) 6

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<<"给出最高分的评委姓名:"

cout<<"给出最低分的评委姓名:"

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; } 数据结构实验报告(一) 7

 程序运行结果如下: 2.线性表的顺序存储结构 用顺序表A记录学生的信息,编写程序: (1)将A表分解成两个顺序表B和C,使C表中含原A表中性别为男性的学生,B表中含原表中性别为女性的学生,要求学生的次序与原A表中相同。

(2)分别求男生和女生的平均年龄  程序代码如下: 数据结构实验报告(一) 8

//数据结构实验1.2线性表的顺序存储结构 //调试环境: Visual C++ 6.0 //-----库文件的预设和定义 #include #include #include #include #include #include //包含库函数strcpy的头文件 #define NULL 0

struct student //定义学生信息 { char name[8]; int sex; //0 女: 1:男 int age; }; typedef struct student STD;

int create(STD *m); //创建顺序表 int calc(STD *m,STD *n,STD *r,float &Fage,float &Mage); //计算、数据处理 void print(STD *m); const int MAX=100; //定义人数 数据结构实验报告(一) 9

void main() { STD A[MAX]; STD B[MAX]; STD C[MAX]; float age1=0,age2=0; //age1男 age2女 create(A); printf("学生总表A记录如下: \n"); print(A); calc(A,B,C,age1,age2); printf("女生名册B记录如下: \n"); print(B); printf("男生名册C记录如下: \n"); print(C); }

int create(STD *m) { int n; printf ("请输入班级总人数:\n "); scanf ("%d",&n); 数据结构实验报告(一) 10

m[0].age=n; //置顺序表 长度 printf("请输入学生信息:\n"); for(int i=1;i<=n;i++) { printf("姓名: "); scanf("%s",&m[i].name); printf("性别0女1男: "); scanf("%d",&m[i].sex); printf("年龄: "); scanf("%d",&m[i].age); printf("\n"); } return 1; }

int calc(STD *m,STD *n,STD *r,float &Fage,float &Mage) { int i,j=1,k=1; n[0].age=r[0].age=0; for( i=1;i<=m[0].age;i++) { if(m[i].sex==0) { strcpy(n[j].name,m[i].name);