您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 实验报告(数据结构(本)-作业5)(实验2)
数据结构课程实验报告学生姓名学号班级指导老师实验名称实验成绩实验报告实验概述实验目的:掌握线性表的链式存储结构及基本操作,深入了解顺序表的基本特性。实验要求:(1)建立一个评委打分的单向链表。(2)显示删除相关结点后的链表信息。(3)显示要求的结果。请认真阅读以上实验的问题描述,按照实验要求认真独立完成实验。如果在实验过程中遇到困难,你可以通过以下辅助方式,顺利完成本实验。实验基本原理:1)声明线性表的数据类型;2)一般在头文件中声明(该头文件中还应包括操作接口的声明);3)告诉编译器该数据类型占内存空间的大小;4)定义线性表类型的变量;5)在函数中或实现代码中的定义;6)告诉编译器为变量分配内存空间;7)操作线性表类型变量;8)操作变量中保存的数据;实验内容实验设计思路、步骤和方法等:+(1)评委信息结点用结构变量存储,包含三个成员项,即姓名、年龄、评分。结构类型定义如下://定义评委信息structpw{charname[8];//姓名shortage;//年龄floatscore;//评分};(2)用头插法或尾插法建立带头结点的单链表,本实验采用尾插法。(3)遍历链表并逐次比较求最高分和最低分。(4)在链表中物理删除,即实际删除最高分和最低分结点;也可以进行逻辑删除,即在被删结点的数据域设置一个删除标记,本实验采用物理删除的方法。(5)遍历链表,累加求和,计算总分及平均分,并输出相关信息。如果对于自己编写好的程序不知道是否正确,你可以查看“实验程序”进行核查。实验过程(实验中涉及的记录、数据、分析)://实验1.1线性表的链接存储结构#include#include#include#definePWRS5//定义评委人数//定义评委信息structpw{charname[8];//姓名shortage;//年龄floatscore;//评分};typedefstructpwPW;//定义链表结点structnode{PWdata;structnode*next;};typedefstructnodeNODE;NODE*create(intn);//建立单链表voidinput(NODE*s,inti);//输入第i个评委信息voidoutput(NODE*s);//输出评委信息voidtraverse(NODE*head);//遍历链表voidcalc(NODE*head);//计算及数据处理voidmain(){NODE*head=NULL;head=create(PWRS);//建立评委信息单链表printf(\n所有评委的评分信息如下:\n);traverse(head);//输出所有评委的评分信息calc(head);//计算成绩printf(该参赛者去掉一个最高分和一个最低分后的有效评委的评分信息如下:\n);traverse(head);//输出有效评委的评分信息}//尾插法建立带头结点的单链表NODE*create(intn){NODE*head,*p,*q;inti;p=(NODE*)malloc(sizeof(NODE));head=p;q=p;p-next=NULL;for(i=1;i=n;i++){p=(NODE*)malloc(sizeof(NODE));input(p,i);p-next=NULL;q-next=p;q=p;}return(head);}//输入评委信息,包括姓名、年龄和评分voidinput(NODE*s,inti){printf(请输入第%d个评委的姓名、年龄和评分:,i);scanf(%s%d%f,&s-data.name,&s-data.age,&s-data.score);}//输出评委信息voidoutput(NODE*s){printf(评委姓名:%6s年龄:%d评分:%6.2f\n,s-data.name,s-data.age,s-data.score);}//遍历链表,输出所有评委的评分信息voidtraverse(NODE*head){NODE*p=head-next;//指向第一个结点while(p!=NULL){output(p);p=p-next;}printf(\n);}//输出最高分及最低分评委信息,删除最高分及最低分结点并计算参赛者的最后平均分voidcalc(NODE*head){NODE*q,*p,*pmin,*pmax;floatsum=0;//总分floatave=0;//平均分//查找最高分和最低分并计算总分p=head-next;pmin=pmax=p;while(p!=NULL){sum+=p-data.score;if(p-data.scorepmax-data.score)pmax=p;//pmax指向最高分结点if(p-data.scoredata.score)pmin=p;//pmin指向最低分结点p=p-next;}//输出最高分及最低分评委信息printf(给出最高分的评委姓名:%6s年龄:%d评分:%6.2f\n,pmax-data.name,pmax-data.age,pmax-data.score);printf(给出最低分的评委姓名:%6s年龄:%d评分:%6.2f\n,pmin-data.name,pmin-data.age,pmin-data.score);printf(\n);//去掉一个最高分和一个最低分,计算并输出参赛者的最后平均分sum-=pmax-data.score;sum-=pmin-data.score;ave=sum/(PWRS-2);printf(该参赛者去掉一个最高分和一个最低分后的平均得分为:%6.2f\n,ave);printf(\n);//在链表中删除最高分和最低分结点for(q=head,p=head-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;}//删除最高分结点}}实验结果:程序运行结果如下:实验小结实验的心得体会:(1)线性表采用链式存储(链表)时,用结构变量存储结点,动态生成结点,用指针链接结点,能有效利用存储空间,插入删除方便。(2)链表不能随机访问,是顺序访问方式,可从某结点访问到其后继结点,通常对单链表的遍历即从表头结点顺序访问到表尾结点,任何在链表上做的查找运算都是在遍历的基础上进行的。(3)单链表操作的关键步骤包括:1)建立链表的头插法:指针变量p开辟单元,生成结点,指针变量q始终指向头结点;操作为:p-next=q-next;q-next=p;2)建立链表的尾插法:指针变量p开辟单元,生成结点,指针变量q始终指向尾结点;操作为:q-next=p;q=p;3)插入:p结点的后面插入新结点s;操作为:s-next=p-next;p-next=s;4)删除:p,q指向相邻结点,q结点是p结点的后继,删除q结点;操作为:p-next=q-next;5)遍历:p指向后继结点;操作为:p=p-next;实验思考:指导教师评语指导教师日期
本文标题:实验报告(数据结构(本)-作业5)(实验2)
链接地址:https://www.777doc.com/doc-6210718 .html