数据结构第9章-1.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
int binsrch(SqList st, KeyType k, int low, int high) { if (lowhigh) return(0); mid= (low + high) / 2; switch { case st.elem[[mid].key == k:return(mid); case st.elem[mid].key k: return(binsrch(st, k, low, mid-1); case st.elem[mid].key k: return(binsrch(st, k, mid+1, high); } } //bisrch * * 9.1 静态查找表 9.2 动态查找树表 9.3 哈希表 查找:在不同的表结构中查找指定元素。 查找到指定元素— 返回该元素在表中的位置。 若找不到满足条件的元素— 查找失败,返回特定值。 元素(记录)的关键字:可以标识一个元素(记录)的数据项值 不同的表结构(查找表)采用不同的查找方法 查找表: 同一类型的数据元素的存储结构 基本操作:查找,插入,删除。 静态查找表:对表只作查找操作。 动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已存在的某个数据元素。 typedef struct { KeyType key; //关键字成员 …… ; //其它成员 } ElemType 本章以后各节中涉及的数据元素类型统一定义为: 静态查找表的类型描述: typedef struct{ ElemType * elem;//数据元素存储空间的首地址,建表时按实际长度分配,0号单元不存记录。 int length; // 静态查找表的长度 } SqList ; int seqsrch(SqList st, KeyType k){ //在静态表st中,查找key域为k的记录的位置,若不存在返回0 i=st.length; while (st.elem[i].key≠k i0) i-- ; return(i) } // seqsrch 9.1.1 顺序查找 如果数组中关键字的排列是无序的,只能进行逐个查找。可采用顺查或逆查。 21 37 88 19 92 05 64 56 80 75 13 0 1 2 3 4 5 6 7 8 9 10 11 21 37 88 19 92 05 64 56 80 75 13 0 1 2 3 4 5 6 7 8 9 10 11 i i 60 i kval = 64 kval = 60 i 改进: 在st.elem[0]处设立监视哨,可以减少查找时间 64 int seqsrch(SqList st,KeyType k){ st.elem[0].key= k; // 监视哨 i= st.length; while (st.elem[i].key≠k) i--; return(i) } //seqsrch 0 1 2 3 4 … st.length st.elem …… k 改进: 在st.elem[0]处设立监视哨。 查找方法评价 算法本身复杂程度 占用存储空间多少 查找速度 —— 平均查找长度ASL ( Average Search Length ) 为确定记录在查找表中的位置,需要和给定值 进行比较的关键字个数的期望值 其中: n 为表长 Pi ——查找第i个记录的概率且 Ci ——为找到该记录和关键字比较过的次数 顺序表查找的平均查找长度为: 对顺序表查找方法而言,Ci = n-i+1 在等概率查找的情况下, ASLunsucc = n + 1 查找不成功时: 2 1 1 1 1 + = + - = ? = n ) i (n n n i ? = = n i i i C P ASL 1 ? = = n i 1 n 1 (n -i+1) 9.1.2 有序表的查找 有序表:表中的记录按关键字有序排列。 即: st.elem[i].key≤ st.elem[i+1].key; (i=1,2,……,n-1) 可使用折半(二分)查找来实现。 折半查找算法: 假设有一序列存在数组 r 中,指针low和high分

文档评论(0)

微微 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档