欢迎来到天天文库
浏览记录
ID:26884627
大小:95.00 KB
页数:9页
时间:2018-11-29
《北京理工大学数据结构实验报告实验四》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《数据结构与算法设计》实验报告——实验四学院:班级:学号:姓名:一、实验目的1.通过实验实践、巩固线性表的相关操作;2.熟悉VC环境,加强编程、调试的练习;3.用C语言实现线性表的抽象数据类型,实现线性表构造、插入、取数据等基本操作;4.理论知识与实际问题相结合,利用上述基本操作实现三种排序并输出。二、实验内容从键盘输入10个数,编程实现分别用插入排序、交换排序、选择排序算法进行排序,输出排序后的序列。三、程序设计1、概要设计为了实现排序的功能,需要将输入的数字放入线性表中,进行进一步的排序操作。(1)抽象数据类型:ADTSqList{数据对象:D=数据关系:R1=基本操作:I
2、nPut(SqList&L)操作结果:构造一个线性表L。OutPut(SqListL)初始条件:线性表L已存在。操作结果:按顺序在屏幕上输出L的数据元素。InsertSort(SqList&L)初始条件:线性表L已存在。操作结果:对L的数据元素进行插入排序。QuickSort(SqList&L)初始条件:线性表L已存在。操作结果:对L的数据元素进行快速排序。SelectSort(SqList&L)初始条件:线性表L已存在。操作结果:对L的数据元素进行选择排序。}ADTSqList⑵主程序流程由主程序首先调用InPut(L)函数创建顺序表,调用InsertSort(L)函数进行插
3、入排序,调用OutPut(L)函数显示排序结果。调用QuickSort(L)函数进行交换排序,调用OutPut(L)函数显示排序结果。调用SelectSort(L)函数进行选择排序,调用OutPut(L)函数显示排序结果。⑶模块调用关系由主函数模块调用创建顺序表模块,排序模块与显示输出模块。⑷流程图开始结束创建线性表进行插入排序进行交换排序进行选择排序输出排序结果输出排序结果输出排序结果2、详细设计(1)、宏定义#defineMAXSIZE15//用作示例的小顺序表的最大长度(2)、抽象数据类型定义typedefstruct{intkey;//关键字域intotherinfo;
4、//其它域}RedType;//记录类型typedefstruct{RedTyper[MAXSIZE+1];//r[0]闲置或用作哨兵单元intlength;//顺序表长度}SqList;//顺序表类型(3)、操作算法程序实现:voidInPut(SqList&L){//输入数字,创建顺序表inti;printf("请输入10个数字:");L.length=10;for(i=1;i<=L.length;i++){scanf("%d",&L.r[i].key);}}voidInsertSort(SqList&L){//对顺序表L作直接插入排序(非递减)inti,j;for(i
5、=2;i<=L.length;++i)if(L.r[i].key6、].key=L.r[low].key;//用子表的第一个记录作枢轴记录pivotkey=L.r[low].key;//枢轴记录关键字while(low=pivotkey){--high;//将比枢轴记录小的记录移到低端}L.r[low].key=L.r[high].key;while(low7、=L.r[0].key;//枢轴记录到位returnlow;//返回枢轴位置}voidQSort(SqList&L,intlow,inthigh){//对顺序表L中的子序列L.r[low…high]作快速排序intpivotloc;if(low
6、].key=L.r[low].key;//用子表的第一个记录作枢轴记录pivotkey=L.r[low].key;//枢轴记录关键字while(low=pivotkey){--high;//将比枢轴记录小的记录移到低端}L.r[low].key=L.r[high].key;while(low7、=L.r[0].key;//枢轴记录到位returnlow;//返回枢轴位置}voidQSort(SqList&L,intlow,inthigh){//对顺序表L中的子序列L.r[low…high]作快速排序intpivotloc;if(low
7、=L.r[0].key;//枢轴记录到位returnlow;//返回枢轴位置}voidQSort(SqList&L,intlow,inthigh){//对顺序表L中的子序列L.r[low…high]作快速排序intpivotloc;if(low
此文档下载收益归作者所有