ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:464.67KB ,
资源ID:13314301      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-13314301.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(应用数据结构实验报告.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

应用数据结构实验报告.docx

1、应用数据结构实验报告学 生 实 验 报 告 书实验课程名称应用数据结构开 课 学 院管理学院指导教师姓名学 生 姓 名学生专业班级信息管理与信息系统学 生 学 号2013 2014 学年 第 2 学期实 验 四实验项目名称综合算法设计实验日期2014年5月26 日实 验 者专业班级信管实验类型综合型一、 实验目的、意义1) 掌握查找的含义2) 掌握基本查找操作的算法和实现3) 掌握动态查找算法的实现、应用场合与优缺点4) 能够针对具体问题,灵活选用适宜的查找算法5) 掌握排序的基本概念,对排序的稳定性及排序的时间复杂度有深刻的认识6) 对比折半插入排序和Shell排序的异同7) 掌握选择排序中

2、堆排序的基本思想和算法实现8) 掌握快速排序的基本思想和算法实现9) 了解归并排序算法的基本思想和程序实现10) 了解基数排序算法的基本思想和程序实现11) 掌握Hash排序算法的基本思想和程序实现在前面实验内容的基础上,根据实际问题选择相应算法。二、 实验基本原理与方法本实验涉及各类查找和排序算法。静态查找,折半查找的思想为:设查找表中的元素存放在数组r中,数据元素的下标范围为low, high,要查找的关键字值为key,中间元素的下标为mid=|_(low + high) /2_|(向下取整),令key与rmid的关键字比较:1 若key=rmid.key,查找成功,下标为m的记录即为所求

3、,返回mid。2 若keyrmid.key,所要找的记录只能在右半部分记录中,再对右半部分使用折半查找法继续进行查找,搜索区间缩小了一半。重复上述过程,直到找到查找表中某一个数据元素的关键字的值等于给定的值key,说明查找成功;或者出现low的值大于high的情况,说明查找不成功。动态查找,编程实现一个开放式的高校本科招生最低录取分数线的查询系统,供师生和家长等查询,高校自愿放入该校的信息,可能随时有高校加入。要求实现的查询功能有:查询等于用户给定分数的高校;查询大于(或小于)用户给定分数的高校查询最低录取分数线在用户给定的分数段中的高校。直接插入排序:将当前无序区的第一个记录插入到有序区中适

4、当位置。折半查找法:在有序表中进行,先确定表的中点位置,再通过比较确定下一步查找哪个半区。Shell排序:先取定一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组,所有距离为d1倍数的记录放在同一个组中,在各组内进行直接插入排序;然后取第二个增量重复上述分组和排序,直至所取的增量dt=1(dtdt-1d2d1),即所有记录放在同一组中进行直接插入排序为止。堆排序是利用大顶堆(或小顶堆)来选取当前无序区中关键字最大(或最小)的记录实现排序。快速排序是对冒泡法的改进,其基本思想是:通过一趟排序将待排文件分割成独立的两部分,其中一部分记录的关键字值均比另一部分记录的关键字小,然后分别对

5、这两部分进行排序,以达到整个序列有序。归并的思想:将两个或两个以上的有序表合并成一个有序表。利用归并的思想实现排序,假设初始的序列含有n个记录,可以看成n个有序的子序列,每个子序列的长度为m,然后把i(2)个子序列归并,得到n/i个长度为i的子序列;再继续归并,如此重复直到得到一个长度为n的有序序列为止。通常使用的是i=2的二路归并法。基数排序的基本思想是采用多关键字的排序。设记录关键字Ri由d个分量ki1, ki2, , kid组成,设每个分量的取值范围为ti|i=1, 2, , m,且t1t2tm。准备m个箱子,先按低位分箱再按序号一次将各个非空箱子里的记录收集起来,再对新收集起来的元素依

6、次按较高的位分箱,直到最高位。分箱即将第s个关键字等于ti的全部记录装入第i个箱子里。按最高位分箱后,按序号一次将各个非空箱子里的记录收集起来,得到的元素序列就是有序的。Hash排序是在Hash查找的基础上演变而来。对待排序列采用单调的Hash函数,并用链地址法处理冲突,最后用一定规则收集存储好的数据从而得到有序序列。三、 实验内容及要求访问首先设法将网站上的数据导入一个文本文件,然后用程序去读取该文件中的数据,对数据的处理可以自行选择排序算法。用菜单选择排序依据(如输入A按上场时间排序,输入B按投篮率排序),处理后的数据用fwrite方式写入新文件中。四、 实验方案或技术路线(只针对综合型和

7、设计型实验)通过在程序中对结构体中指针的定义、赋值和引用从而完成对链表中特定数据的引用,结合文件的使用、函数的调用,自行选择排序算法、编制算法完成指定程序的编制、调试和执行,并通过观测程序输出结果验证程序设计的正确性。实验过程总结如下:(1)选定一种排序算法,对该算法实现的思路进行分析(2)编程实现选定的算法(3)对所编写的程序进行调试(4)对程序运行的结果进行截图(5)对实验结果进行分析五、 实验原始记录(可附加页)(程序设计类实验:包括原程序、输入数据、运行结果、实验过程发现的问题及解决办法等; 分析与设计、软件工程类实验:编制分析与设计报告,要求用标准的绘图工具绘制文档中的图表。系统实施

8、部分要求记录核心处理的方法、技巧或程序段; 其他实验:包括实验输入数据,处理模型、输出数据及结果分析)1、我选择的球队是火箭队,存放在文件read.txt文件中的内容如下:2、源程序如下:#include#include#includetypedef struct MatchData char name20; /球员 float time; /时间 float shoot; /投篮 float threepoint; /三分 float freethrow; /罚球 float previousRebounds; /前篮板 float backRebounds; /后篮板 float tota

9、lRebounds; /总篮板 float assist; /助攻 float steal; /抢断 float blockshot; /盖帽 float turnover; /失误 float foul; /犯规 float score; /得分MatchData;int LineNumStat(FILE *fp);void InitialPlayers(MatchData *players,int playersNumber);void InputPlayersData(FILE *fp,MatchData *players,int playersNumber);void ShowMenu

10、();void SortPlayersData(MatchData *players,int playersNumber,int sortType);void SortByTime(MatchData *players,int playersNumber);void SortByShoot(MatchData *players,int playersNumber);void SortByThreepoint(MatchData *players,int playersNumber);void SortByFreethrow(MatchData *players,int playersNumbe

11、r);void SortByPreviousRebounds(MatchData *players,int playersNumber);void SortByBackRebounds(MatchData *players,int playersNumber);void SortByTotalRebounds(MatchData *players,int playersNumber);void SortByAssist(MatchData *players,int playersNumber);void SortBySteal(MatchData *players,int playersNum

12、ber);void SortByBlockshot(MatchData *players,int playersNumber);void SortByTurnover(MatchData *players,int playersNumber);void SortByFoul(MatchData *players,int playersNumber);void SortByScore(MatchData *players,int playersNumber);void OutputPlayersData(FILE *fp,MatchData *players,int playersNumber)

13、;int main() MatchData *players; FILE *fpin,*fpout; /输入文件和输出文件指针 int lineNumber; /行数 int playersNumber; /球员的人数 char inputFileName256; char outputFileName256; int choice; printf(请输入存储输入数据的文件名:n); scanf(%s,inputFileName); if(fpin=fopen(inputFileName,r)=NULL) printf(打开输入文件出错!n); exit(1); printf(请输入存储输出数

14、据的文件名:n); scanf(%s,outputFileName); if(fpout=fopen(outputFileName,wb)=NULL) printf(打开输出文件出错!n); exit(2); lineNumber=LineNumStat(fpin); rewind(fpin); /文件位置指针回到文件头 playersNumber=lineNumber; players=(MatchData*)malloc(playersNumber*sizeof(MatchData); InitialPlayers(players,playersNumber); InputPlayersD

15、ata(fpin,players,playersNumber); ShowMenu(); scanf(%d,&choice); SortPlayersData(players,playersNumber,choice); OutputPlayersData(fpout,players,playersNumber); free(players); fclose(fpin); fclose(fpout); return 0;/统计文本文件的行数int LineNumStat(FILE *fp) int linenum=0; char buffer100; while(!feof(fp) fgets

16、(buffer,100,fp); linenum+; return linenum;/初始化球员的数据void InitialPlayers(MatchData *players,int playersNumber) int i; MatchData *p; for(i=0;iname,); p-time=0; p-shoot=0; p-threepoint=0; p-freethrow=0; p-previousRebounds=0; p-backRebounds=0; p-totalRebounds=0; p-assist=0; p-steal=0; p-blockshot=0; p-tu

17、rnover=0; p-foul=0; p-score=0; /输入球员数据void InputPlayersData(FILE *fp,MatchData *players,int playersNumber) int i; MatchData *p; for(i=0;iname,&p-time,&p-shoot,&p-threepoint,&p-freethrow,&p-previousRebounds,&p-backRebounds, &p-totalRebounds,&p-assist,&p-steal,&p-blockshot,&p-turnover,&p-foul,&p-score

18、); /显示菜单void ShowMenu() printf(请选择排序方式:n); printf(1.按时间排序n); printf(2.按投篮排序n); printf(3.按三分排序n); printf(4.按罚球排序n); printf(5.按前篮板排序n); printf(6.按后篮板排序n); printf(7.按总篮板排序n); printf(8.按助攻排序n); printf(9.按抢断排序n); printf(10.按盖帽排序n); printf(11.按失误排序n); printf(12.按犯规排序n); printf(13.按得分排序n); printf(请输入选项:);/

19、排序球员数据void SortPlayersData(MatchData *players,int playersNumber,int sortType)switch(sortType) case 1:SortByTime(players,playersNumber); break; case 2:SortByShoot(players,playersNumber); break; case 3:SortByThreepoint(players,playersNumber); break; case 4:SortByFreethrow(players,playersNumber); break

20、; case 5:SortByPreviousRebounds(players,playersNumber); break; case 6:SortByBackRebounds(players,playersNumber); break; case 7:SortByTotalRebounds(players,playersNumber); break; case 8:SortByAssist(players,playersNumber); break; case 9:SortBySteal(players,playersNumber); break; case 10:SortByBlocksh

21、ot(players,playersNumber); break; case 11:SortByTurnover(players,playersNumber); break; case 12:SortByFoul(players,playersNumber); break; case 13:SortByScore(players,playersNumber); break; default:printf(排序方式选择错误,程序即将退出。n); break; /按时间排序void SortByTime(MatchData *players,int playersNumber) int i,j;

22、MatchData temp; for(i=playersNumber-1;i=1;i-) for(j=0;ji;j+) if(playersj.time=1;i-) for(j=0;ji;j+) if(playersj.shoot=1;i-) for(j=0;ji;j+) if(playersj.threepoint=1;i-) for(j=0;ji;j+) if(playersj.freethrow=1;i-) for(j=0;ji;j+) if(playersj.previousRebounds=1;i-) for(j=0;ji;j+) if(playersj.backRebounds=1;i-) for(j=0;ji;j+) if(playersj.totalRebounds=1;i-) for(j=0;ji;j+) if(playersj.assistplayersj+1.assist) temp=playersj; playersj=playersj+1; playersj+1=temp; /按抢断排序void SortBySteal(MatchData *players,int playersNumber) int i,j; MatchData tem

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2