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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计基数排序算法演示.docx

1、数据结构课程设计 基数排序算法演示 2.1 存储结构设计说明 3 2.2 主要算法流程图 43.1算法设计 53.2程序代码 74 调试分析 95 课设总结 106 参考文献 10 1 需求设计 1、题目:基数排序算法演示 2、说明:基数排序:通过LSD(最低为优先)法:先按最低关键字位k1对待排序数据中的n个值进行排序,按k1值把待排序文件中的n个记录分配到具有不同k1值的若干个堆,然后按k1值从小到大的次序收集在一起,下次再按高一位关键子位k2的值进行分配和收集,如此不断地按更高一位关键字位进行分配和收集,直到用kn分配和收集之后,整个数据按多关键字位有序。2 概要设计 2.1存储结构设计

2、说明typedef struct /定义数据在存储类型 int key;data1; /类型标识符typedef struct /定义数据在存储类型 int keyd; /用数组存放数据个位数、十位数、百位数 int next; /指针域指向下一个数据形成链表结构data2; /类型标识符data1 Rmax;data2 R1max; /新类型数据2.2主要算法流程2-2主要算法流程图3 详细设计 3.1 算法设计(1)基数排序的“分配”与“收集”过程 :第一趟 : 图3-1第一趟演示基数排序的“分配”与“收集”过程 第二趟 : 图3-2第二趟演示基数排序的“分配”与“收集”过程 第三趟 :图

3、3-3 收集分配图示(2)基数排序过程阐述:设有n个记录,d个关键字,rd为基数,通过LSD(最低为优先)法:初始化一系列的空队列,先按最低关键字位k1对待排序数据中的n个值进行排序,按k1值把待排序文件中的n个记录分配到具有不同k1值的相应队列。然后按k1值从小到大的次序收集在一起,下次再按高一位关键子位k2的值进行分配和收集,如此不断地按更高一位关键字位进行分配和收集,每一趟按一个关键值的位置记录分配到rd个队列中,同一链队列中的记录都是用链域指针链接起来的,所有的队头和队尾指针分别放在两个数组中,每一趟分配后通过修改指针将这个链队列中的记录收集起来;直到用kn分配和收集之后,重复分配和收

4、集d趟,便得到了最终排序好的有序序列。整个数据按多关键字位有序。3.2 程序代码#include stdio.h#define max 100#define rd 10#define d 3typedef struct /定义数据在存储类型 int key;data1; /类型标识符typedef struct /定义数据在存储类型 int keyd; /用数组存放数据个位数、十位数、百位数 int next; /指针域指向下一个数据形成链表结构data2; /类型标识符int jishusort(data2 R) /*基数排序函数*/ int frd,erd; /定义队列指示变量,分别指向队

5、列头和队列尾 int p=0,k,t; /定义指示变量p,和存放数据各位关键值(个位,十位,百位)的k,临时队尾存放用于收集数据的t for(int i=d;i=0;i-) /外层循环控制数的关键值(个位,十位,百位) for(int j=0;jrd;j+) /*内层循环一 初始化队列为空*/ fj=-1; ej=-1; while(p!=-1) /*内层循环二 数据按关键值分配至相应队列*/ k=Rp.keyi; /关键值赋予k if(fk=-1) /队列为空队列头指向当前数据 fk=p; else Rek.next=p; /队列不为空链接当前数据到队列尾 ek=p; /修改队列尾指向当前值

6、 p=Rp.next; /数据指示变量后移为分配下一数据做准备 int j=0; /刷新队列指示器,为数据收集做准备 while(fj=-1) /*内层循环三 数据收集*/ j+; /扫描到非空队列作为收集数据的 p=fj; /当前指示器指向队列首 t=ej; /临时存放保护队列尾便于下一队列链接上 while(jrd-1) /*内层循环四 收据数据链接成链表*/ j+; /扫描下一队列 if(fj!=-1) /队列非空则链接至数据收集链表 Rt.next=fj; /数据收集链表尾指针指向索扫描到队列的队列首 t=ej; /更改链表尾指针 Rt.next=-1; /收集数据完成,链表尾置空 r

7、eturn p;void choices(data1 R,int i) /选择开关(主界面) data2 R1max; /新类型数据 int gw,sw,bw; /定义关键值,个位数,十位数,百位数 int p; /定义p存放最终返回值,链表头 for(int m=0;mi;m+) gw=Rm.key%10; /个位数关键值由除10取整得 sw=(Rm.key%100)/10;/十位数由除百求余再除10取整得 bw=Rm.key/100; /百位数关键值由除100取余得 R1m.key2=gw; /以下分别将关键值赋予相应位置 R1m.key1=sw; R1m.key0=bw; R1m.nex

8、t=m+1; /各数据指针域初始化 int m; R1m.next=-1; /数据链表尾置空 p=jishusort(R1); /调用基数排序函数 while(p!=-1) /循环控制逐一打印排序后数列 printf(%d%d%d ,R1p.key0,R1p.key1,R1p.key2); p=R1p.next; printf(n);int main() /*主函数*/ int i=0; /局部变量用作结束输入 data1 Rmax; printf(请输入数据以-1结束:); scanf(%d,&Ri.key); while(Ri.key!=-1) /待排序数据输入 i+; printf(请输

9、入数据以-1结束:); scanf(%d,&Ri.key); choices(R,i); /调用主界面函数进行开关(操作)选择 return 0;4 调试分析 图4-1运行结果 图4-2运行结果图 按照提示输入任意一组整数,以-1结束,如图所示,程序成功运行,实现将一组数字进行基数排序。由于能力和时间的关系,程序部分没有包含处理不同类型的数据,只进行处理整形的数字排序,今后如果时间条件允许的话一定再进行详细的研究。5 课设总结通过这次课程设计,使我对数据结构这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们计算机专业的学习中占据着十分重要的地位。同时也使我们知道,要学好这

10、门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。课程设计是检验能力的重要环节,这能我们知识掌握更加牢固。在最开始接到课设题目时,由于没有具体的内容和要求,我就把它当做心里想的那样简单的编辑,结果只表现了一个不完全符合要求的简单排序,不能用特例来表示,经过老师的指正和引导,在同学的帮助探讨下又重新完成了一份,因为时间和能力的不足可能这个程序还并不是那么的完美,还请老师体谅。为此我也特别感谢此次设计对我有帮助的所有老师和同学。相信从课设当中学会的知识和收获,懂得的道理,对我以后的学习和生活都有帮助,我也会在不断经历中慢慢进步。6 参考文献1严蔚敏,吴伟民著. 数据结构:C语言版. 清华大学出版社,20072谭浩强著. C+面向对象程序设计. 北京:清华大学出版社,2006

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

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