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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

完整版数据结构课程设计报告.docx

1、完整版数据结构课程设计报告数据结构课程设计报告一 前沿:排序是数据结构中的一块难点,也是重点。熟练的掌握各种各样的排序算法是对每个编程人员的基本的要求。历年的考研还是期末考中,排序都占了比较大的比重。二 程序实现的功能:本程序采用了各种不同的方法对同一个输入进行排序,且每一个元素其本身亦是一个结构体,又可以进行扩充,使其可以存储其他的相关的信息。在此我仅仅举了结构体本身只有一个元素的情况。a) 采用的数据类型:为了讨论的方便,本程序采用了复合型的结构体类型,且才用了静态线性表的形式,不能进行扩充,一旦空间开辟,就不能在扩充(注意)。具体如下:typedef struct /每个元素的类型定义,

2、为了讨论的方便本程序采用了单关键字;int key; /但可以根据需要扩充,每个关键字令其为整型的;redtype;typedef struct /开辟的数组,以上述类型的元素组成;redtype *r; /存入要输入的元素的数组;int length; /数组的长度,shellsort中要用到; sqlist;四 对部分头文件和函数的说明:改头文件主要用来实现清屏,使得出的结果更清晰明白。“shellsort(sqlist l,int d)”:该函数主要实现希尔排序,使无序的数据排列成有序的序列“quicksort(sqlist l,int low,int high)”:该函数实现的功能同上

3、,只是原理不同“heapadjust(sqlist l,int s,int m)”:该函数实现调整无序的数据序列使其成为大顶堆,即树型结构的最上面是值最大的,这样进过一次的调整便得到了值最大的元素,即可进过多次的排序使一个无序的序列又序。“heapsort(sqlist l)”:该函数实现建立堆的过程。在其中间调用heapadjust实现最终建立大顶的任务。“oesort(sqlist l,int n)”:该函数进行奇偶排序将无序的数据排成有序的。五 核心程序算法:void shellsort(sqlist& l,int d) /采用希尔排序,本程序中的l.r0.key使暂存单元,非哨兵。d=

4、l.length/2;while(d0)for(i=d+1;i=l.length;+i)if(l.ri.key0&l.r0.keyl.rj.key;j-=d)l.rj+d=l.rj;l.rj+d=l.r0;d=d/2;基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2d1重复上述的分组和排序,直至所取的增量dt=1(dtdt-ld2d1),即所有记录放在同一组中进行直接插入排序为止。该方法实质上是一种分组插入方法void quicksort(sqlist& l,int lo

5、w,int high)/快速排序if(lowhigh) );/对rlow.high进行一次快速排序i=low;j=high;l.r0=l.ri;dowhile(il.r0.key)-j;if(ij)l.ri=l.rj;+i;while(ij&l.ri.key=l.r0.key)+i;if(ij)l.rj=l.ri;-j;while(i!=j);l.ri=l.r0;quicksort(l,low,i-1); 对rlow.i-1进行快速排序quicksort(l,i+1,high); 对rI+1.high进行快速排序基本思想设当前待排序的无序区为rlow.high,利用分治法可将快速排序的基本思想

6、描述为:分解:在rlow.high中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间rlow.pivotpos-1和rpivotpos+1.high,并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。注意:划分的关键是要求出基准记录所在的位置pivotpos。划分的结果可以简单地表示为(注pivot=rpivotpos)rlow.pivotpos-1.keysrpivo

7、tpos.keyrpivotpos+1.high.keys其中lowpivotposhigh。求解:通过递归调用快速排序对左、右子区间Rlow.pivotpos-1和rpivotpos+1.high快速排序。组合:因为当求解步骤中的两个递归调用结束时,其左、右两个子区间已有序。对快速排序而言,组合步骤无须做什么,可看作是空操作。void heapadjust(sqlist &l,int s,int m)/ /筛选法调整堆,使其成为大顶堆rc=l.rs.key;for(j=2*s;j=m;j*=2)if(jm&l.rj.keyl.rj.key)break;l.rs.key=l.rj.key;s=

8、j;l.rs.key=rc;void heapsort(sqlist &l)/建堆的过程for(i=l.length/2;i0;i-)heapadjust(l,i,l.length);for(i=l.length;i1;i-)t=l.r1.key,l.r1.key=l.ri.key,l.ri.key=t;heapadjust(l,1,i-1);基本思想:堆排序利用了大根堆堆顶记录的关键字最大这一特征,使得在当前无序区中选取最大关键字的记录变得简单。先将初始文件R1.n建成一个大根堆,此堆为初始的无序区。再将关键字最大的记录R1(即堆顶)和无序区的最后一个记录rn交换,由此得到新的无序区r1.n

9、-1和有序区rn,且满足r1.n-1.keysrn.key。由于交换后新的根R1可能违反堆性质,故应将当前无序区r1.n-1调整为堆。然后再次将r1.n-1中关键字最大的记录r1和该区间的最后一个记录Rn-1交换,由此得到新的无序区r1.n-2和有序区rn-1.n,且仍满足关系r1.n-2.keysrn-1.n.keys,同样要将r1.n-2调整为堆。直到无序区只有一个元素为止。void oesort(sqlist& l,int n)/奇偶交换排序change=1;标志变量,若其为零,即两次更替的交换中都没有交换数据,即排序结束while(change)change=0;for(i=1;il.

10、ri+1.key)t=l.ri.key,l.ri.key=l.ri+1.key,l.ri+1.key=t;change=1;for(i=2;il.ri+1.key)t=l.ri.key,l.ri.key=l.ri+1.key,l.ri+1.key=t;change=1;算法过程:第一趟对序列中的所有奇数项i扫描,第二趟对序列中的所有偶数项i扫描。若ri ri+1,则交换它们。第三趟有对所有的奇数项,第四趟对所有的偶数项,如此反复,直到整个序列全部排好序为止。五源程序:#include stdio.h#include malloc.h#include conio.h#define maxsize

11、 5typedef structint key;redtype;typedef structredtype *r;int length;sqlist;void shellsort(sqlist l,int d)int i,j;d=l.length/2;while(d0)for(i=d+1;i=l.length;+i)if(l.ri.key0&l.r0.keyl.rj.key;j-=d)l.rj+d=l.rj;l.rj+d=l.r0;d=d/2;void quicksort(sqlist l,int low,int high)int i,j;if(lowhigh)i=low;j=high;l.r

12、0=l.ri;dowhile(il.r0.key)-j;if(ij)l.ri=l.rj;+i;while(ij&l.ri.key=l.r0.key)+i;if(ij)l.rj=l.ri;-j;while(i!=j);l.ri=l.r0;quicksort(l,low,i-1);quicksort(l,i+1,high);void heapadjust(sqlist l,int s,int m)int rc,j;rc=l.rs.key;for(j=2*s;j=m;j*=2)if(jm&l.rj.keyl.rj.key)break;l.rs.key=l.rj.key;s=j;l.rs.key=rc

13、;void heapsort(sqlist l)int i,t;for(i=l.length/2;i0;i-)heapadjust(l,i,l.length);for(i=l.length;i1;i-)t=l.r1.key,l.r1.key=l.ri.key,l.ri.key=t;heapadjust(l,1,i-1);void oesort(sqlist l,int n)int t,i,change;change=1;while(change)change=0;for(i=1;il.ri+1.key)t=l.ri.key,l.ri.key=l.ri+1.key,l.ri+1.key=t;change=1;for(i=2;il.ri+1.key)

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

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