- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 查找 静态表查找 顺序查找法 折半查找法 用分块查找法 动态表查找 二叉排序树,平衡二叉树(AVL树) 哈希(Hash)表及其查找 Hash函数 处理冲突 Hash表及其查找 9.0 与查找有关的术语: ● 查找表----由同一类型的数据元素(记录)组成的集合。 记作:ST={a1,a2,...,an} ● 查找表的操作 ● 生成查找表 ● 查找元素(记录)x在是否在表ST中 ● 查找元素(记录)x的属性 ● 插入新元素(记录)x ● 删除元素(记录)x ...... ● 查找----根据给定的某个关键字值,在查找表中确定一个其 关键字等于给定值的记录或数据元素。 设k为给定的一个关键字值,R[1..n]为n个记录的表,若 存在R[i].key=k,1≤i≤n,称查找成功;否则称查找失败。 ● 静态查找----查询某个特定的元素,检查某个特定的数据元 素的属性,不插入新元素或删除元素(记录) 。 ●?动态查找----在查找过程中,同时插入查找表中不存在的数 据元素(记录)。 ● 查找表的类型及其查找方法 (1) 静态查找表 ● 顺序表,用顺序查找法 ● 线性链表,用顺序查找法 ● 有序的顺序表,用: 折半查找法;**斐班那契查找法;插值查找法; ● 索引顺序表/分块表,用分块查找法。 (2) 动态查找表 ● 二叉排序树,平衡二叉树(AVL树) **● B树, B+树, 健树 (3) 哈希(Hash)表 ● 平均查找长度----查找一个记录时比较关键字次数的平均值。 n ASL=∑ PiCi i=1 Pi --- 查找r[i]的概率 Ci --- 查找r[i]所需比较关键字的次数 9.1 静态查找表 9.1.1 顺序表与顺序查找法 1.顺序表的描述 例 元素(记录)类型 #define n 100 //表长100 struct arecord { keytype key ;//关键字类型 char name[6];//姓名 ...... //其它 } r[n+1]; //n+1个记录 其中:r[0]为监视哨; 记录按输入次序存入r[1..n]中。 3.算法设计 算法1:假定不使用监视哨r[0] 基本思想:将关键字k依次与记录的关键字 r[n].key,r[n-1].key,...,r[1].key 比较, 如果找到一个记录r[i],有r[i].key=k (1≤i≤n),则查找 成功,停止比较,返回记录的下标i;否则,查找失败,返回0。 int sequsearch(struct arecord r,int n,keytype k) { int i=n; //从第n个记录开始查找 while (i=1 k!=r[i].key) i--; //继续扫描 if (i) printf(”success\n”); //查找成功 else printf(”fail\n”); //查找失败 return i; //返回记录的下标i } 算法2:假定使用监视哨r[0] 基本思想:先将关键字k存入r[0].key,再将k依次与 r[n].key,r[n-1].key,...,r[1].key, r[0].key进行比较, 如果找到一个记录,有k=r[i].key, (0≤i≤n),则停止比较。 如果 i0,则查找成功;否则,查找失败。 int sequsearch(struct record r,int n,keytype k) { int i=n; //从第n个记录开始查找 r[0].key=k; //k填入r[0].key while( k!=r[i].key ) i-- ; //继续扫描 if (i!=0) printf(”success\n”); //查找成功 else printf(”fai
原创力文档


文档评论(0)