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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验报告.docx

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

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

3、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函数,并用链地址法处理冲突,最后用一定规则收集存储好的数据从而得到有序序列。3、 主要仪器设备及耗材安装有Turbo C+ 3.0运行环境的电脑,无耗材要求。4、 实验方案或技术路线本实验含有五部分内容静态查找、动态查找、插入排序与选择排序、快速排序与归并排序、查找及排序算法集成。A静态查找部分查找表的存储结构为有序表,即表中记录按关键字大小排序存放。输入待查数据元素的关键字

7、进行查找。为了简化算法,记录只含一个整型量关键字字段,记录的其余数据部分忽略不考虑。此程序中要求对整型量关键字数据的输入按从小到大排序输入。B动态查找部分主要的功能是查找,查找表为高校最低录取分数信息的集合。根据题意可知,该查找表中的元素个数可能随时增减,所以它是一个动态查找表,可采用树状结构保存。为了提高查询速度,可建立二叉排序树并在二叉排序树中实现查找。C排序部分考虑对20个整数的随机输入进行排序,各排序功能基本上都可以成为独立调用的模块,因此可以先写出排序算法,然后用主函数调用。D 查找及排序算法集成部分此部分需要学生自行设计,本指导书不给出具体算法。第二部分:实验过程记录实验原始记录(

8、包括实验数据记录,实验现象记录,实验过程发现的问题等)1 概要设计(说明本程序中用到的所有抽象数据类型的定义,主程序的流程以及各程序模块之间的层次或调用关系)1.1抽象数据类型 队列:ADT Queue 数据对象:D ai | aiElemSet, i=1,2,.,n, n0 数据关系:R1 |ai-1, aiD, i=2,.,n 基本操作:void init_Q(Queue &Q);操作结果:构造空队列Qint Q_empty(Queue Q);初始条件:队列Q存在操作结果:若Q为空队列,则返回TRUE,否则FALSEint Q_length(Queue Q);初始条件:队列Q存在操作结果:

9、返回队列Q的元素个数,即队列长度int gethead_Q(Queue Q);初始条件:队列Q存在操作结果:返回队列Q的队头元素void en_Q(Queue &Q,int e);初始条件:队列Q存在操作结果:插入元素e为Q的新的队尾元素。void de_Q(Queue &Q,int &e);初始条件:队列Q存在操作结果:删除Q的队头元素。ADT Queue线性表: ADT List数据对象: D=ai|1=i=o,ai属于elementtype类型数据关系:R=|ai,ai+1属于D,i=1,.,n-1基本运算:InitList(&l)DestroyList(&l);.1.2主程序流程 1.

10、3各程序模块之间的调用关系2详细设计(实现程序模块的具体算法)2.1数据类型归并排序:typedef int KeyType;typedef int DataType;typedef struct KeyType key; /* 排序码字段*/ DataType info; /*记录的其它字段*/ RecordNode;typedef struct int n; /* n为文件中的记录个数,nMAXNUM */ RecordNode recordMAXNUM; SortObject;基数排序:typedef int KeyType;typedef int DataType;typedef st

11、ruct Node RadixNode;struct Node KeyType keyD; RadixNode *next;typedef RadixNode *RadixList;typedef struct QueueNode RadixNode *f; /* 队列的头指针*/ RadixNode *e; /* 队列的尾指针*/Queue;Queue queueR;哈希排序:typedef struct hnode int data; struct hnode *next;HNODE;typedef struct point struct hnode *pt;POINT;2.2主函数详细代

12、码void main() int flag=0;/定义操作指示码 int *p,way,dlta4=5,3,2,1,L=11,randint; RadixList hp=element; long i; FILE *fp1,*fp2; if(!(fp1=fopen(BeforeOrder.txt,w+) printf(can not open the file BeforeOrder.txt !); if(!(fp2=fopen(AfterOrder.txt,w+) printf(can not open the file AfterOrder.txt !); printf(* 请输入随机数种

13、 *n); scanf(%d,&randint); srand(randint); p=(int *)malloc(MAX*sizeof(int); for(i=1;iMAX;i+) pi=rand(); fprintf(fp1,%-8d,pi); fclose(fp1); printf(* 请选择一种排序算法 *n); printf(* 1-折半插入排序 *n); printf(* 2-Shell排序 *n); printf(* 3-堆排序 *n); printf(* 4-快速排序 *n); printf(* 5-归并排序 *n); printf(* 6-基数排序 *n); printf(*

14、 7-Hash排序 *n); printf(请选择:); /读取指示码 scanf(%d,&flag); switch(flag) case 1:BinsertSort(p,MAX-1);break; case 2:ShellSort(p,MAX-1,dlta,4);break; case 3:HeapSort(p,MAX-1);break; case 4:QuickSort(p,MAX-1);break; case 5:vector.n = MAX-1; for(i=0;iMAX-1;i+) vector.record i.key =pi+1; mergeSort(&vector); for

15、(i=0;iMAX-1;i+) fprintf(fp2,%-8d,vector.record i.key ); fclose(fp2); printf(成功了!n); exit(1); case 6: for(i=0;iMAX-1;i+) elementi.key0=0; elementi.key1=pi+1/10000%10; elementi.key2=pi+1/1000%10; elementi.key3=pi+1/100%10; elementi.key4=pi+1/10%10; elementi.key5=pi+1%10; elementi.next=NULL; for (i=0;

16、inext; while (hp) fprintf(fp2,%-8d , hp-key1*10000+hp-key2*1000+hp-key3*100+ hp-key4*10+hp-key5); hp=hp-next; fclose(fp2); printf(成功了!n); exit(1); case 7: HashSort(p,int L,M); /保存排序结果 for(i=1;iMAX;i+) fprintf(fp2,%-8d,pi); fclose(fp2);printf(成功了!n); getchar(); 3调试分析(内容包括:a)调试过程中遇到的问题是如何解决的以及对设计与实现的回

17、顾讨论和分析;b)算法的时空分析包括基本操作和相关算法的时间复杂度和空间复杂度的分析以及改进设想;c) 经验和体会等)3.1问题回顾与分析1)开始使用rand函数产生随机数的时候,会发现生成的随机数每一次的运行都是一样的。后发现是因为没有随机数种的原因,所以系统的每一次运行,都应该让用户输入一个随机数种,使用srand()函数进行设置,就可以解决这个问题。2)对100000个随机数进行排序的时候,可能时间会有点长。3)要生成100000个随机数,MAX的值就应该是100001,因为很多的排序算法中,都用数组的第一个索引来存储临时变量。4)哈希排序的内存泄露问题还没有解决。3.2算法的时空分析:

18、3.3经验体会:记得大一学习C语言的时候,只接触过两种简单的排序算法,而且效率都是O(n*n)。当我接触到快速排序和哈希排序时,就为它的精髓所深深吸引到。好的一个排序算法,不仅要考虑到比较的次数,还要考虑它的赋值次数。经过这一次的实验,我对排序的算法有了更深一次的了解。以前学到的更多是理论知识,动手的机会不是很多,正是这一次的实验激发了我对数据结构的兴趣,数据结构弄懂了,编程的思想就提高了一个台阶,以后碰到什么问题,都有一个方向去解决。第三部分 结果与讨论实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)程序设计类实验:包括原程序、输入数据、运行结果、实验过程发现的问题及解决方法等;分析与设计、软件工程类实验:编制分析与设计报告,要求用标准的绘图工具绘制文档中的图表。系统实施部分要求记录核心处理的方法、技巧或程序段;其它实验:记录实验输入数据、处理模型、输出数据及结果分析测试结果(列出测试结果,包括输入和输出。这里的测试数据应该完整而严格,最好多于需求分析中所列)1、 输入随机数种2、 选择排序类型3文件BeforeOrder.txt中的内容4文件AfterOrder.txt中的内容-实验报告评语及成绩(请按优,良,中,及格,不及格五级评定)教师签字:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1