数据结构中查找的学习.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构中查找的学习

* * #includestdio.h #includemalloc.h typedef int status; typedef int ElemType; #define OK 1 #define ERROE 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 20 #define INCREMENT 5 typedef struct { ElemType *elem; int length; int listsize; }List; status initlist(List L)//初始化查找表 { L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(L.elem)); if(!L.elem) return (OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return OK; } status putin(List L)//查找表赋值 { printf(请输入线性表元素:\n); for(int i=1;i=10;i++) { scanf(%d,L.elem[i]); L.length++; } return OK; } int search(List L,ElemType e) { } void main() { List L; ElemType e; int loc; initlist(L); putin(L); printf(请输入要查找的值:); scanf(%d,e); loc=search(L,e); if(loc!=0) printf(%d在第%d位\n,e,loc); else printf(%d不存在\n,e); } * * 前面讨论的各种结构中,记录在结构中的相对位置是随机的,和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较。 理想的情况希望不经过任何比较,一次存取便能得到所查记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字和结构中的一个惟一的存储位置相对应 * * * * * * * * * * * * * * * * * * * * * * 哈希表(续) 哈希冲突的解决方法 开放定址法(开地址法) 链地址法(拉链法) 再哈希法(双哈希函数法) 建立一个公共溢出区 * 哈希冲突的解决方法1 开放定址法(开地址法) 设计思路:有冲突时就去寻找下一个空的哈希地址,只要哈希表足够大,空的哈希地址总能找到,并将数据元素存入。 * 具体实现: Hi=(Hash(k)+di) mod m ( 1≤i m ) 其中: Hash(k)为哈希函数 m为哈希表长度 di 为增量序列 1,2,…m-1 (1)线性探测法 含义:一旦冲突,就找附近(下一个)空地址存入。 开放定址法(开地址法) * 关键码集为 {47,7,29,11,16,92,22,8,3}, 设:哈希表表长为m=11; 哈希函数为Hash(key)=key mod 11; 拟用线性探测法处理冲突。建哈希表如下: 0 1 2 3 4 5 6 7 8 9 10 29 11 16 92 22 8 3 例 47 7 * 线性探测法的优点:只要哈希表未被填满,保证能找到一个空地址单元存放有冲突的元素; 线性探测法的缺点:可能使第i个哈希地址的同义词存入第i+1个哈希地址,这样本应存入第i+1个哈希地址的元素变成了第i+2个哈希地址的同义词,……, 因此,可能出现很多元素在相邻的哈希地址上“堆积”起来,大大降低了查找效率。 解决方案:可采用二次探测法或伪随机探测法,以改善“堆积”问题。 讨论: * 仍举上例,改用二次探测法处理冲突,建表如下: 0 1 2 3 4 5 6 7 8 9 10 11 22 3 47 92 16 7 29 8 △ ▲ △ △ 注:只有3这个关键码的冲突处理与上例不同, Hash(3)=3,哈希地址上冲突,由 H1=(Hash(3)+12) mod 11

文档评论(0)

shuwkb + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档