- 1、本文档共47页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Hash表_构建方法_编程方法
散列(Hashing)存贮;这种存贮线性表F的方法,称为散列存贮。称函数h(x)为散列函数(HASH函数)。
称存放结点的数组T(m)为散列表(Hash表).
设F是含有六个结点的线性表,其中K0=(9,e) ,k1=(12,b), k2=(20,e),
K3=(26,a), k4=(34,d), k5=(48,f).
若取散列函数h(x)=x mod 10,并使用能存放十个结点的数组T[10]作为Hash表,则下图表示了F的散列存贮的状况。;0
1
2
3
4
5
6
7
8
9;如果我们想找到key4=34的结点K4,那么只要计算出
34 mod 10=4
就能在数组元素T[4]中找到它。
出现h(keyi)=h(keyj),称这种情况是冲突。
散列存贮的两个主要问题是:一是选取散列函数;二是选取解决冲突的办法。;静态散列方法; ; 采用的散列函数是
hash(x) = x % 73 + 13420
其中,“%”是除法取余操作。
则有:hash(12361) = hash(07250) = hash(03309) = hash(30976) = 13444。就是说, 对不同的关键码, 通过散列函数的计算, 得到了同一散列地址。我们称这些产生冲突的散列地址相同的不同关键码为同义词。
由于关键码集合比地址集合大得多, 冲突很难避免。所以对于散列方法, 需要讨论以下两个问题: ;构造散列函数时的几点要求:
散列函数应是简单的,能在较短的时间内计
算出结果。
散列函数的定义域必须包括需要存储的全部
关键码, 如果散列表允许有 m 个地址时, 其
值域必须在 0 到 m-1 之间。 ;一、开式寻址法解决冲突;1.建立Hash表的插入运算。
为了把键值k存入Hash表,先计算出h(k)=i.
如果t[i] 是一个空位置(即t[i]=0),那么把k存入t[i],插入过程结束;
如果t[i]不是空位置(即t[i]≠0),那么再判断t[i]是否等于k,
若t[i]=k,则键值k已在Hash表中,插入过程结束;
否则,t[i]已被另一个键值所占用(发生冲突),此时必须为k找另一个空位置,最简单的办法是进行线性探测,我们可使用下面的循环探测地址序列:;(i+1) mod m
(i+2) mod m
……
(i+m-1) mod m
一旦找到一个空位置,就把k存入刚探测到的空位置上,插入过程结束;
如果用完整个探测地址序列还没有找到空位置,那么Hash表满,插入失败,过程结束。
例
Hash(x)=x%10; ;2.查找键值k
首先计算出h(k)=i.
如果t[i]=k,则查找成功,查找过程结束;
如果t[i]不等于k,那么必须按照上面所给出的循环探测地址序列进行查找。
查找过程一直进行到下面三种情况之一出现为止:
(1)当前位置上的键值等于k,则查找成功。
(2)找到一个空位置,则查找失败。
(3)用完循环探测地址序列还没有找到k,则查找失败。;3.删除键值K.
首先在Hash表t[m]上进行查找。
如果查找成功,假定t[j]=k,那么应把t[j]删除。但是,我们不能把t[j]置成空,而只能标上已被删除的标记,否则将会影响以后的查找。因此,在插入时,凡遇到标有删除标记的位置都可以插入;而在查找时,凡遇到标有删除标记的位置,还要继续查下去。; 实现上面各种运算的程序。
我们假定所使用的键值是大于零的整数,用0对Hash表t[M]进行初始化,用-1作为删除标记,所使用的Hash函数是h(x). ;#define M 100
void makenull(t)
int t[ ];
{int i;
for(i=0;im;i++)t[i]=0;
}
;int insert1(t,k)
int t[ ],k;
{int i,j;
i=h(k);
for(j=0;jm t[(i+j)%M]!=kt[(i+j)%M]0;j++);
i=(i+j)%M;
if (t[i]=0)
{t[i]=k;
return(0);
}
return(1);
}; ; ; ;int search1(t, k)
int t[ ],k;
{int i ,j;
i =h(k);
for(j=0;jmt[(i+j)%M]!=kt[(i+j)%M]!=0;
j++);
i=(i+j)%M;
if(t[i]==k)return(i);
return(-1);
}; ;int deletel(t,k)
int t[ ],k;
{int i,j;
i=h(k);
for(j=0;jm t[(i+j)%M]!=kt[(i+j)%M]!=0;j++);
i=(i+j)%M;
if(t[i]==k)
{t[
您可能关注的文档
最近下载
- 05G525 吊车轨道联结及车挡(适用于钢吊车梁).pdf
- 2024江西省房屋建筑与装饰工程消耗量定额及统一基价.pptx VIP
- 《一句顶一万句》读书分享.pptx VIP
- IT售前工程师修炼之道-.ppt VIP
- 小升初大量考试真题(共20套).pdf VIP
- 合资公司成立讨论会议纪要(12月11日)(3).docx VIP
- 新概念一册lesson43-44练习册.docx VIP
- GBT-信息技术安全技术个人可识别信息(PII)处理者在公有云中保护PII的实践指南.pdf VIP
- 医院停电应急预案培训记录.docx VIP
- 2024-2025学年高一数学必修一《第一章 集合与常用逻辑用语》测试卷附答案解析.pdf VIP
文档评论(0)