东华理工大学数据结构课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计
论文题目:基于线性表下的查找与排序
姓名:赖德发
学院:理学院
专业:信息与计算科学
班级:1123202
学号:201120320202
2014年1月17日
一、实验环境
(1)硬件:学生每人一台计算机。
(2)软件:Windows操作系统,Visual C++6.0。
二、实验内容
基于线性表下的查找与排序。
三、实验原理
1.基于线性表的查找法概述
集合结构是数据对象之间关系松散的一种数据结构,对其进行查找是根据给定的关键字,在特定的列表中确定一个其关键字与给定值相同的数据元素,并返回该数据元素在列表中的位置。查找的方法分为比较式查找法和计算式查找法,其中比较式查找法可分为基于线性表的查找法和基于树的查找法;而计算式查找法也称为Hash(哈希)查找法。基于线性表的查找法是将集合的数据对象组织成为线性表形式进行查找,即用给定的关键字与线性表中各元素的关键字逐个比较,直到成功或失败。线性表的存储结构通常是顺序存储结构,也可使用链式存储结构。
查找时可在表的一端设置一个“监视哨”,存放要查找元素的关键字,从表的另一端开始查找,若在“监视哨”找到要查找元素的关键字,返回失败信息,否则返回关键字的位序。基于线性表的查找技术有着非常广泛的应用。
2.基于线性表的排序法概述
排序是计算机程序设计中的一种重要操作,在数值计算或数据处理过程中,都会直接或间接用到数据的排序问题。排序的功能是将一个数据元素(或称记录)的无序序列,按数据元素的关键字大小排列成一个递增或递减有序的记录序列。
由于待排序的记录数量不同,使得排序过程中涉及的存储器也不同,因此可将排序方法分为内排序和外排序。内排序包括插入、交换、选择和归并等几类排序。
2.1基于插入类的排序概述
插入类排序的基本思想是假定记录序列中前面的一部分记录已经有序,把后面的一个记录插入已排序的有序子序列中去,使得插入这个记录后得到的依然是有序序列,从而逐步扩大有序的子序列的长度,直到所有记录都有序为止。直接插入排序是采用顺序查找法来确定记录的插入位置。折半插入排序是采用折半查找法来确定记录的插入位置。希尔排序是对待排序记录序列先做宏观直接插入排序调整,再做微观直接插入排序调整,故称缩小增量排序排序。
2.2基于交换类的排序概述
交换排序的基本思想是两两比较待排序记录的关键字,当两个记录的次序相反时进行交换,直到没有反序的记录为止。基于交换类的排序有冒泡排序和快速排序。
冒泡排序是比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
2.3基于选择类的排序概述
选择排序的基本思想是从每一趟待排序数据中选取一个关键字最小的记录,并置于适当的位置上。即第一趟从n个记录中选取关键字最小的记录,第二趟从剩下的n-1个记录中选取关键字最小的记录,直到整个序列的记录选完,由选取记录的顺序便可得到关键字有序的序列。堆排序的基本思想是通过类似于淘汰赛的想法,让序列中的关键字两两相比,不断淘汰较大者,最终选出关键字最小的记录。
四、系统测试
4.1基于线性表的查找源代码
#include
#include
#define LIST_SIZE 100
//定义顺序表的最大长度
typedef int keyType ;
//定义关键字类型为整形
typedef struct
{
keyType key ;
//关键字项
}
RecordType ;
//记录类型
typedef struct
{
RecordType r[LIST_SIZE+1];
//r[0]用作监视哨
int length ;
//定义顺序表长度
}
RecordList ;
//顺序表类型
/*函数申明*/
void CreatList(RecordList*L);
int SeqSearch(RecordList*l,keyType k); int BinSrch(RecordList*l,keyType k); void Display(RecordList*L);
void shunxu();
void zheban();
void Menu();
//主函数
int main()
{
int i ;
Menu();
printf("请选择:\n");
scanf("%d",&i);
switch(i)
{
case 1 :
{
shunxu();
break ;
}
case 2 :
{
zheban();
break ;
}
case 3 :
exit(1);
default :