课程设计---查找及排序.docVIP

  • 11
  • 0
  • 约1.5万字
  • 约 23页
  • 2016-08-29 发布于重庆
  • 举报
课程设计---查找及排序

题目:查找和排序 (一)查找 需求分析 本程序实现2种查找:无序表的直接查找,顺序表的折半查找。 顺序表的数据元素都是整数。 查找程序的概要设计 1.无序表的直接查找 抽样数据类型顺序表的定义如下: ADT SqList{ 数据对象:D = {ai| ai∈ElemSet, i = 1,2,…,n,n≥0} 数据关系:R1 = {a(i-1),ai|a(i-1),ai∈D,i=2,…,n} 基本操作: Init(SqList L) 操作结果:构造一个空的顺序表L。 insert(SqList L,int m) 初始条件:顺序表L已存在。 操作结果:在顺序表中有序插入新的数据元素m,L的长度加1。 Locate(SqList L,int e) 初始条件:顺序表L已存在。 操作结果:查找e的位置。 print(SqList L) 初始条件:顺序表L已存在。 操作结果:依次显示出L中的数据元素。 }ADT SqList 2.有序表的折半查找 抽样数据类型顺序表的定义如下: ADT SqList{ 数据对象:D = {ai| ai∈ElemSet, i = 1,2,…,n,n≥0} 数据关系:R1 = {a(i-1),ai|a(i-1),ai∈D,i=2,…,n} 基本操作: Init(SqList L) 操作结果:构造一个空的顺序表L。 insert(SqList L,int m) 初始条件:顺序表L已存在。 操作结果:在顺序表中有序插入新的数据元素m,L的长度加1。 Search_Bin(SqList L,int m) 初始条件:顺序表L已存在。 操作结果:折半查找m的位置。 print(SqList L) 初始条件:顺序表L已存在。 操作结果:依次显示出L中的数据元素。 }ADT SqList 详细设计 1.无序表的直接查找 #includeiostream #includecstring #includecstdio #includecstdlib #define LS 100//顺序表存储空间的初始分配量 #define LC 10//顺序表存储空间的分配增量 using namespace std; typedef int Status; using namespace std; //- - - 动态分配顺序存储结构 - - - typedef struct { int *elem;//存储空间基址 int listsize;//当前分配的存储容量(以sizeof(int)为单位) int len;//当前长度 } SqList; Status Init(SqList L)//构造一个空的顺序表L { L.elem=(int *)malloc(sizeof(int)*LS); if(!L.elem) exit(-1);//存储分配失败 L.listsize=LS;//初始存储容量 L.len=0;//空表长度为0 return 1; }//算法的时间复杂度O(c) Status insert(SqList L,int m)//插入数据元素 { if(L.lenL.listsize) { L.elem=(int *)realloc(L.elem,sizeof(int)*(L.listsize+=LC)); if(!L.elem) exit(-1); } *(L.elem+L.len++)=m; return 1; } int compare(int m,int n)//比较数据元素是否相同 { if(m==n)return 1; else return 0; } Status Locate(SqList L,int e)//查找数据元素的位置 { int i=1; int* p=L.elem; while(i=L.len!(compare(*p++,e))) { ++i; } if(i=L.len) cout第一个e在顺序表的第i个位置endl; else //查找失败 coutcant find 数据元素 eendl; return 0; }//算法的时间复杂度O(length(L) void print(SqList L)//遍历顺序表 { printf(%d,*(L.elem)); if(L.len1) { fo

文档评论(0)

1亿VIP精品文档

相关文档