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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

北京理工大学数据结构实验报告4.docx

1、北京理工大学数据结构实验报告4数据结构与算法统计实验报告 实验四学院: 班级:学号:姓名: 一、实验目的 1、熟悉VC环境,学会使用C语言利用顺序表解决实际问题。2、通过上机、编程调试,加强对线性表的理解和运用的能力。3、锻炼动手编程,独立思考的能力。二、实验内容 从键盘输入10个数,编程实现分别用插入排序、交换排序、选择排序算法进行排序,输出排序后的序列。三、程序设计 1、概要设计为了实现排序的功能,需要将输入的数字放入线性表中,进行进一步的排序操作。(1)抽象数据类型:ADT SqList 数据对象:D=数据关系:R1= 基本操作:InPut(SqList &L)操作结果:构造一个线性表L

2、。 OutPut(SqList L)初始条件:线性表L已存在。操作结果:按顺序在屏幕上输出L的数据元素。InsertSort(SqList &L)初始条件:线性表L已存在。操作结果:对L的数据元素进行插入排序。QuickSort(SqList &L)初始条件:线性表L已存在。操作结果:对L的数据元素进行快速排序。SelectSort(SqList &L)初始条件:线性表L已存在。操作结果:对L的数据元素进行选择排序。ADT SqList 主程序流程由主程序首先调用InPut(L)函数创建顺序表,调用InsertSort(L)函数进行插入排序,调用OutPut(L)函数显示排序结果。再由主程序首

3、先调用InPut(L)函数创建顺序表,调用QuickSort(L)函数进行交换排序,调用OutPut(L)函数显示排序结果。再由主程序首先调用InPut(L)函数创建顺序表,调用SelectSort(L)函数进行选择排序,调用OutPut(L)函数显示排序结果。模块调用关系由主函数模块调用创建顺序表模块,排序模块与显示输出模块。流程图 2、详细设计 (1)数据类型设计#define MAXSIZE 15/用作示例的小顺序表的最大长度typedef struct int key;/关键字项 int otherinfo;/其它数据项RedType;/记录类型typedef struct RedTy

4、pe rMAXSIZE+1;/r0闲置或用作哨兵单元 int length;/顺序表长度SqList;/顺序表类型 (2)操作算法设计void InPut(SqList &L)/输入数字,创建顺序表 int i; printf(请输入10个数字:n); L.length=10; for(i=1;i=L.length;i+) scanf(%d,&L.ri.key); void InsertSort(SqList &L)/对顺序表L作直接插入排序 int i,j; for(i=2;i=L.length;i+) if(L.ri.keyL.ri-1.key)/如果“”,需将L.ri插入有序子表 L.r

5、0.key=L.ri.key;/复制为哨兵 L.ri.key=L.ri-1.key; for(j=i-2;L.r0.keyL.rj.key;j-) L.rj+1.key=L.rj.key;/记录后移 L.rj+1.key=L.r0.key;/插入到正确位置 int Partition(SqList &L,int low,int high)/交换顺序表L中子表rlowhigh的记录,枢轴记录到位,并返回其所在位置,/此时在它之前(后)的记录均不大(小)于它。 int pivotkey; L.r0.key=L.rlow.key;/用子表的第一个记录作枢轴记录 pivotkey=L.rlow.key

6、;/枢轴记录关键字 while(lowhigh)/从表的两端交替地向中间扫描 while(low=pivotkey) -high;/将比枢轴记录小的记录移到低端 L.rlow.key=L.rhigh.key; while(lowhigh&L.rlow.key=pivotkey) +low;/将比枢轴记录大的记录移到高端 L.rhigh.key=L.rlow.key; L.rlow.key=L.r0.key;/枢轴记录到位 return low;/返回枢轴位置void QSort(SqList &L,int low,int high)/对顺序表L中的子序列L.rlowhigh作快速排序 int

7、pivotloc; if(lowhigh)/长度大于1 pivotloc=Partition(L,low,high);/将L.rlowhigh一分为二 QSort(L,low,pivotloc-1);/对低子表递归排序,pivotloc是枢轴位置 QSort(L,pivotloc+1,high);/对高子表递归排序 void QuickSort(SqList &L)/对顺序表L做快速排序 QSort(L,1,L.length);void SelectSort(SqList &L)/对顺序表L作简单选择排序 int i,j,k; for(i=1;iL.length;i+)/选择第i小的记录,并交

8、换到位 k=i; for(j=i+1;jL.length;j+)/在L.riL.length中选择key最小的记录 if(L.rj.keyL.rk.key) k=j; if(i!=k)/与第i个记录交换 L.r0.key=L.ri.key; L.ri.key=L.rk.key; L.rk.key=L.r0.key; void OutPut(SqList L)/输出顺序表 int i; for(i=1;i=L.length;i+) printf(%d ,L.ri.key); printf(n);主函数设计void main()/主程序 SqList L; printf(插入排序法:n); InP

9、ut(L);/创建线性表L InsertSort(L);/对L进行插入排序 OutPut(L);/输出线性表L printf(交换排序法:n); InPut(L);/创建线性表L QuickSort(L);/对L进行交换排序 OutPut(L);/输出线性表L printf(选择排序法:n); InPut(L);/创建线性表L SelectSort(L);/对L进行选择排序 OutPut(L);/输出线性表L四、程序调试分析 在快速排序中,对一些后引入的变量,如pivotkey没有声明,导致编译失败。 在直接插入排序中,由于对程序理解不深,将if的扩错了位置,导致程序不能按预期输出。五、程序运

10、行结果测试一:插入排序法:请输入10个数字:1 3 5 7 9 2 4 6 8 00 1 2 3 4 5 6 7 8 9交换排序法:请输入10个数字:1 3 5 7 9 2 4 6 8 00 1 2 3 4 5 6 7 8 9选择排序法:请输入10个数字:1 3 5 7 9 2 4 6 8 01 2 3 4 5 6 7 8 9 0测试二:插入排序法:请输入10个数字:49 38 65 97 76 13 27 67 52 3413 27 34 38 49 52 65 67 76 97交换排序法:请输入10个数字:49 38 65 97 76 13 27 67 52 3413 27 34 38 4

11、9 52 65 67 76 97选择排序法:请输入10个数字:49 38 65 97 76 13 27 67 52 3413 27 38 49 52 65 67 76 97 34 六、程序清单#include #include #define MAXSIZE 15/用作示例的小顺序表的最大长度typedef struct int key;/关键字项 int otherinfo;/其它数据项RedType;/记录类型typedef struct RedType rMAXSIZE+1;/r0闲置或用作哨兵单元 int length;/顺序表长度SqList;/顺序表类型void InPut(SqL

12、ist &L);void InsertSort(SqList &L);void OutPut(SqList L);void QuickSort(SqList &L);void QSort(SqList &L,int low,int high);void SelectSort(SqList &L);void main()/主程序 SqList L; printf(插入排序法:n); InPut(L);/创建线性表L InsertSort(L);/对L进行插入排序 OutPut(L);/输出线性表L printf(交换排序法:n); InPut(L);/创建线性表L QuickSort(L);/对

13、L进行交换排序 OutPut(L);/输出线性表L printf(选择排序法:n); InPut(L);/创建线性表L SelectSort(L);/对L进行选择排序 OutPut(L);/输出线性表Lvoid InPut(SqList &L)/输入数字,创建顺序表 int i; printf(请输入10个数字:n); L.length=10; for(i=1;i=L.length;i+) scanf(%d,&L.ri.key); void InsertSort(SqList &L)/对顺序表L作直接插入排序 int i,j; for(i=2;i=L.length;i+) if(L.ri.keyL.ri-1.key)/如果“”,需将L.ri插入有序子表 L.r0.key=L.ri.key;/复制为哨兵 L.ri.key=L.ri-1.key; for(j=i-2;L.r0.keyL.rj.key;j-)

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

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