【设计】数据结构课程设计多关键字排序

上传人:学**** 文档编号:196311710 上传时间:2021-09-18 格式:DOCX 页数:23 大小:587.53KB
返回 下载 相关 举报
【设计】数据结构课程设计多关键字排序_第1页
第1页 / 共23页
【设计】数据结构课程设计多关键字排序_第2页
第2页 / 共23页
【设计】数据结构课程设计多关键字排序_第3页
第3页 / 共23页
【设计】数据结构课程设计多关键字排序_第4页
第4页 / 共23页
【设计】数据结构课程设计多关键字排序_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《【设计】数据结构课程设计多关键字排序》由会员分享,可在线阅读,更多相关《【设计】数据结构课程设计多关键字排序(23页珍藏版)》请在金锄头文库上搜索。

1、工学院运算机工程学院课程设计报告设计名称:数据结构课程设计选题名称:多关键字排序姓名:学号:网络工程081专业班级:系(院):运算机工程学院设计时间:设计地点:软件工程试验室、教室指导老师评语:成果:签名:年月日1课程设计目的1、训练同学敏捷应用所学数据结构学问,独立完成问题分析,结合数据结构理论学问,编写程序求解指定问题;2. 初步把握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3. 提高综合运用所学的理论学问和方法独立分析和解决问题的才能;4. 训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化同学的理论学问,提高编程水平,并在此过程中培育他们严谨的科学态度和

2、良好的工作作风;2课程设计任务与要求:任务题目: 多关键字的排序【问题描述】多关键字的排序有其肯定的有用范畴;例如:在进行高考分数处理时,除了需对总分进行排序外,不同的专业对单科分数的要求不同,因此尚需在总分相同的情形下,按用户提出的单科分数的次序要求排出考生录用的次序;【基本要求】(1)假设待排序的记录不超过10000,表中记录的关键字数不超过5,各个学科关键字的范畴均为0 至 100,总分关键字的范畴是0-300 ;按用户给定的进行排序的关键字的优先关系,输出排序结果;(2)商定按LSD 法进行多关键字的排序;在对各个关键字进行排序时采纳两种策略:其一是利用稳固的内部排序法,其二是利用“安

3、排”和“收集”的方法;并综合比较这两种策略;【测试数据】由随机数产生器生成;【实现提示】由于是按LSD 方法进行排序, 就对每个关键字均可进行整个序列的排序,但在利用通常的内部排序方法进行排序时,必需选用稳固的排序方法要求:1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等如干步骤完成题目,最终写出完整的分析报告;前期预备工作完备与否直接影响到后序上机调试工作的效率;在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率;2、. 设计的题目要求达到肯定工作量(300 行以上代码) ,并具有肯定的深度和难度;3、程序

4、设计语言举荐使用C/C+,程序书写规范,源程序需加必要的注释;4、每位同学需提交可独立运行的程序;5 、每位同学需独立提交设计报告书(每人一份)10 页(代码不算) ;,要求编排格式统一、规范、内容充实,不少于6、课程设计实践作为培育同学动手才能的一种手段,单独考核;3课程设计说明书一 需求分析1)选题功能分析【题目的意义】1、对高考分数依据总分和不同学科的分数依据优先级次序排出考生录用的次序,以满意不同专业对单科分数的要求;对不同排序策略进行综合比较;2、【实现的功能】1、2、用 C 语言设计实现一个高考成果排序系统;txt 文档中;考生考号为1,2, 3创建模拟的高考考生成果表,存放到用伪

5、随机数生成器生成各考号同学的各个学科成果,并运算总分成果;由于实际中高考考生成果表是已知的(模拟创建的从创建的考生成果表中读取数据,并对数据处理3、txt 文档),程序能从文件中读取数据;4、依据学科的优先级次序,对同学的成果排序;既可以以某一学科的单科成果优先级最高排序,也可以先按总分优先级最高来排序;5、在对各个关键字即单科成果进行排序的时候,配和搜集 ”的方法进行排序;分别用稳固的内部排序法(冒泡法) 以及“分6、7、能够对冒泡法排序策略和“安排和搜集 ”方法排序策略进行的执行时间进行比较;输入数据: 1 各科英文首字母的代号,字符型,如2 整型数, 0-100001 输出程序用两种方法

6、进行排序的进程和执行时间2 输出前 n 名同学的信息smce二概要设计1、 伪随机生成的数据包含语文、数学、英语三科成果;总成果为语文、数学、英语三科成果的txt 文档中和;学号按成果数组的下标赋值,生成同学成果记录,将该记录储存到2、 从上面的txt 文档中读取数据到一个二维数组中,以便对同学信息进行处理3、 给出排序的优先关系,依据优先关系由低位向高位逐个关键字进行排序;4、对单科成果进行排序的时候,单科成果虽然是0-100 ,但总成果是0-300 ,所以要建301 个队;然后再依据稳固的内列进行排序,先按“安排”和“搜集”的方法进行一趟“基数排序”部排序法(冒泡法)进行排序;将搜集好的或

7、排序好的序列储备,以进行对次优先级的关键字进行再排序;5、将排序好的同学成果依据用户提出的提取人数的要求,储存到另一个屏幕6、系统用到的抽象数据类型定义txt 文档中,并输出到double BubTime1,BubTime2, BubTime3, BubTime4, BubTimeSum, DCTime1,行的时间DCTime2,DCTime3, DCTime4,/按第一个关键字代表的学科成果用冒泡法排序执行的时间/冒泡法排序的总时间/ 按第一个关键字代表的学科成果用安排和收集的方法执DCTimeSum;int score100005,/安排和收集法排序的总时间/随机创建的模拟同学记录源数组b

8、ubble100005,/进行冒泡法排序时用来存放同学记录源数组,并且随排序进行数组中的记录发生交换copy100005;struct LSD d301;/从模拟的同学记录源txt 文件中读取同学记录到该数组/安排数组, 该处考虑到把总分 (0-300)也列入优先级序列301 个队列/用来存放收集到的同学记录/存放有优先关系的学科代号序列中,因此建立了int *c10000; char x5;7、系统中的各个函数模块1:void CreatScore(int score100005);高考中该表是已知的,不必创建2: void Collect(struct LSD d301,int *c100

9、00);安排好的记录收集到c 指针数组储存3: void InitDivide(struct LSD d301);次收集后必需做的工作4: double DCSort(struct LSD d301,int *c10000,int n);排序的方法5: double BubbleSort(int score100005,int n); 6: void Print();出到屏幕上7: void savesources(int score100005,int n);存放到文件中8: void saveresults(int score100005,int n);同学记录) ,将这 n 条同学的记录

10、存放到新的文件中9:void load(int score100005);取记录到该二维数组中8、 各函数之间的调用关系1:主函数可以调用除子函数2 之外的全部函数/随机创建同学记录表score;正常/LSD法排序中的收集函数,即将/用于初始化暂时安排数组,在每一/安排( Divide )和收集( Collect )/冒泡法排序/将排序结果文件中的记录数据输/将模拟创建的高考同学信息记录/ 依据用户的要求 (总成果在前多少名的/ 从同学高考记录源文件中读2:子函数4 可以调用子函数【功能模块图】2 和 3InitDivide(d)CreateScore(score)M A INSavesour

11、ces(score.10000)Lode(copy)返回执行时间Collect(d,c)DcSort(d,c,0)InitDivide(d)返回执行时Print()BubbleSort(bubble,0)Saveresults(bubble,n)三 具体设计1.抽象数据类型:该数据类型是在安排和收集的时候存放安排成果数组1 抽象数据类型 struct LSDstruct LSD/ 队列的结构类型,链表储备结构类型int *cur;/ 当前位置struct LSD *next;/ 队列中下一个位置;2 CreatScore(int scoreRecordNumberKeyNumber) 函数名同

12、学成果记录的score,包含语文、数学、英语、总分和学号/* 创建一个含有RecordNumber,随机生成语文、数学、英语的成果;* 传递的参数是成果数组*/score,无返回值void CreatScore(int scoreRecordNumberKeyNumber)/* 伪随机生成语文、数学、英语的成果for(i=0;i RecordNumber;i+)for(j=0;j3;j+)scoreij=rand()%101;*/ 成果的范畴是0-100/* 总分成果初始化*/for(i=0;i RecordNumber;i+)scorei3=scorei0+scorei1+scorei2;/

13、 总成果为各科成果之和/* 学号的初始化 */for(i=0;i=0; i-)if(di.cur.=NULL)p=&di;while(p-cur.=NULL)cj=p-cur; j+;p=p-next;/当前队列不空,即有同学的成果安排到该队列/ 当前位置有同学的成果/收集到 c 指针数组中/ 指针 p 指向该队列的下一个位置当前位置有学生的成绩开头初始化指针数组建立 300 个队列Y队列为空N当前位置同学的成果收集到指针数组中指针 p 指向该队列的下一个位置终止4初始化安排数组InitDivide(struct LSD dQueueNumber)/* 初始化 d 数组即置空,在每一次收集后必需做的工作*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号