1、数据结构与算法设计实验报告实验四学院: 班级: 学号: 姓名: 一、实验目的 1. 通过实验实践、巩固线性表的相关操作;2. 熟悉 VC 环境,加强编程、调试的练习;3. 用 C 语言实现线性表的抽象数据类型,实现线性表构造、插入、取数据等基本操作;4. 理论知识与实际问题相结合,利用上述基本操作实现三种排序并输出。二、实验内容 从键盘输入 10 个数,编程实现分别用插入排序、交换排序、选择排序算法进行排序,输出排序后的序列。三、程序设计 1、概要设计为了实现排序的功能,需要将输入的数字放入线性表中,进行进一步的排序操作。(1)抽象数据类型:ADT SqList数据对象:D= |,12,0ia
2、ElemStin数据关系:R1= 1,| ,iiiiaD基本操作:InPut(SqList /关键字域int otherinfo;/其它域RedType;/记录类型typedef structRedType rMAXSIZE+1;/r0闲置或用作哨兵单元int length;/顺序表长度SqList;/顺序表类型(3) 、操作算法程序实现:void InPut(SqList printf(“请输入 10 个数字:n“);L.length=10;for(i=1;i=pivotkey)-high;/将比枢轴记录小的记录移到低端L.rlow.key=L.rhigh.key;while(low#def
3、ine MAXSIZE 15/用作示例的小顺序表的最大长度typedef structint key;/关键字域int otherinfo;/其它域RedType;/记录类型typedef structRedType rMAXSIZE+1;/r0闲置或用作哨兵单元int length;/顺序表长度SqList;/顺序表类型void InPut(SqList printf(“请输入 10 个数字:n“);L.length=10;for(i=1;i=pivotkey)-high;/将比枢轴记录小的记录移到低端L.rlow.key=L.rhigh.key;while(lowhigh/将比枢轴记录大的
4、记录移到高端L.rhigh.key=L.rlow.key;L.rlow.key=L.r0.key;/枢轴记录到位return low;/返回枢轴位置void QSort(SqList if(lowhigh)/长度大于 1pivotloc=Partition(L,low,high);/将 L.rlowhigh一分为二QSort(L,low,pivotloc-1);/对低子表递归排序,pivotloc 是枢轴位置QSort(L,pivotloc+1,high);/对高子表递归排序void QuickSort(SqList void SelectSort(SqList for(i=1;iL.leng
5、th;i+)/选择第 i 小的记录,并交换到位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;InPut(L);/创建线性表 Lprintf(“插入排序法:n“);InsertSort(L);/对 L 进行插入排序OutPut(L);/输出线性表 Lprintf(“交换排序法:n“);QuickSort(L);/对 L 进行交换排序OutPut(L);/输出线性表 Lprintf(“选择排序法:n“);SelectSort(L);/对 L 进行选择排序OutPut(L);/输出线性表 L