- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
zy第九章
数 据 结 构 第九章 查找 9.1 静态查找表 9.2 动态查找表 9.3 哈希表 查找的基本概念和术语 查找表:被查找的对象称作查找表,是由同一类型的数据元素(记录)构成的集合。 关键字:是数据元素中某个数据项的值,用它可以标识一个数据元素。若此关键字可以唯一的标识一个记录,则称此关键字为主关键字。反之,称用以识别若干记录的关键字为次关键字。当数据元素只有一个数据项时,其关键字即为该数据元素的值。 查找:根据给定的某个值,在查找表中确定一个其关键字等于给定值的记录或数据元素。 查找的结果:若表中存在这样的一个记录,则称查找是成功的,此时查找的结果为给出整个记录的信息,或指示该记录在查找表中的位置;若表中不存在关键字等于给定值的记录,则称查找不成功,此时查找的结果可给出一个“空”记录或“空”指针。 静态查找:不涉及插入和删除操作的查找称为静态查找,静态查找结果不改变查找集合。此类查找表称为静态查找表。 动态查找:涉及插入和删除操作的查找称为动态查找,动态查找在查找过程中同时插入表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。此类查找表称为动态查找表。 查找结构:面向查找操作的结构。 查找方法评价 查找速度 所需辅助存储空间 算法本身复杂程度 平均查找长度:为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值称为查找算法在查找成功时的平均查找长度,简称ASL(Average Search Length)。 对于含有n个记录的表,查找成功时的平均查找长度为: 9.1 静态查找表 1.顺序查找的查找过程 从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录反之,若直到第一个记录,其关键字和给定值比较都不等,则表明表中没有所查记录,查找不成功。 2.顺序表的类型描述 #define max 1024 typedef int ElemType; typedef struct{ ElemType elem[max]; /*0号单元留空*/ int length; }SSTable; 3.算法实现 4.性能分析 对于含有n个记录的顺序表,在等概率情况下进行顺序查找的查找成功的平均查找长度为 假设查找成功和查找不成功的可能性相同,对每个记录的查找概率也相同,则此时顺序查找的平均查找长度为 二、折半查找(二分查找) 1.折半查找的基本思想 每次将待查记录所在区间缩小一半,直到找到或找不到 适用条件:采用顺序存储结构的有序表 2.折半查找的查找过程 设表长为n, low、high和mid分别指向待查元素所在区间的下界、上界和中点,k为给定值 初始时,令 low=1, high=n? mid=(low+high)/2 让k与mid指向的记录比较 若k==r[mid].key,查找成功 若kr[mid].key,则high=mid-1 若kr[mid].key,则low=mid+1 重复上述操作,直至查找成功或 lowhigh时查找失败 例如:已知如下11个数据元素的有序表: {05,13,19,21,37,56,64,75,80,88,92} 现要查找关键字为21和85的数据元素。 指针low和high分别指示待查元素所在区间的下界和上界,指针mid指示区间的中间位置,mid= ?(low+high)/2 ? 查找21 查找85 3.算法实现 int Search_Bin(SSTable ST,KeyType key) { /*二分查找的非递归算法*/ int mid,low,high; low=1; high=ST.length; /*设置初始区间*/ while(low=high) /*当前的查找区间非空*/ { mid=(low+high)/2; if(key==ST.elem[mid].key) return(mid); /*查找成功,返回mid*/ else if(keyST.elem[mid].key) high=mid-1; /*继续在前半区间进行查找*/ else low=mid+1; /*继续在后半区间进行查找*/ } return(0); /*查找失败*/ } 4.性能分析 从上述查找过程可知: 二分查找的查找过程可以用一棵二叉树来描述。其中,树中的每个结点表示
原创力文档


文档评论(0)