算法导论-11.2-4.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法导论-11.2-4

自自娱娱 自自乐乐 算算法法导导论论--1111..22--44 分类: 算法导论 2012-07-03 16:31 75人阅读 评论 (1) 收藏 举 题 目: 说明在散列表内部,如何通过将所有未占用的槽位链成一个自由表,来分配和去配元素的存储空间。假定一个槽位 可以存储一个标志、一个元素加上一个或两个指针。所有的字典操作和自由链表操作应具有O (1)的期望运行时间。 该自由链表是双链表吗?或者,是不是单链表就足够了? 思考: 已知 (1)所有未占用的槽位链成一个自由链表 (2)槽位即slot (3)Hash (x)返回x所属于的slot 一个slot存储以下内容,占用和未占用时表示的含义不同 struct node { int key; bool flag;//0:free,1:used int pre; int next; }; 当这个slot未占用时,取值如下: struct node { int key;//没有意义,初始化为-1 bool flag;//0:free int pre;//自由链表中上一个空闲slot,没有则为-1 int next;//自由链表中下一个空闲slot,没有则为-1 }; 当这个slot被占用时,取值如下: struct node { int key;//关键字 bool flag;//1:used int pre;//具有相同Hash值的下一个结点 int next;//具有相同Hash值的上一个结点 };   插入操作时,从自由链表中取出一个空闲slot,填入关键字x,修改指针,链表相应的队列中,具体可以分为以下几 种情况: (1)x所属的slot未被占用,则 step1:把这个slot从自由链表中移出 1 step2:填入关键字x step3:修改指针,在这种情况下其next和pre都置为-1 (2)x所属的slot已经被占用,令占用这个slot的关键是y,y也属于这个slot,则 step1:从自由链表中取出一个空闲的slot,这个slot肯定不是x所属的slot,只是拿过来用 step2:填入关键字x step3:修改指针,把slot链表入到 “以x所属的slot为头结点的队列”中 (3)x所属的slot已经被占用,令占用这个slot的关键是y,y不属于这个slot,通过 (2)可知,这个情况是有可能 的 step1:从自由链表中取出一个空闲的slot,这个slot肯定不是x所属的slot,也不是y所属的slot,只是拿过来用 step2:在新slot中填入关键字y,修改指针,让y使用这个新slot,而把原来的slot空出来还给x step3:在x所属的slot中填入关键字x step4:修改 “x所属的slot”指针,类似 (1)-step3   删除操作时,令待删除的关键字是x,释放x所占用的slot,具体可以分为以下几种情况 (1)x所占用的slot正是x所属的slot,且slot-next=-1,即所有关键字中只有x属于这个slot,x被删除后,slot 2 (1)x所占用的slot正是x所属的slot,且slot-next=-1,即所有关键字中只有x属于这个slot,x被删除后,slot 就空闲了 step1:释放slot到自由链表中 (2)x所占用的slot正是x所属的slot,但还有别的关键字中只有x属于这个slot,应该优先使用关键所属于的 slot,而释放 “不自己关键字的、临时拿过来用的”slat step1:从以slot为头结点的队列中另选一个slot2,slot2的关键字属于slot而不属于slot2,只是因为slot被占 用,所以才用slot2 step2:把slot2的内容填入slot step3:修改指针,让slot代替slot2存在于队列中,不同的是slot还是队列头 step4:释放slot2到自由链表中 (3)x所占用的slot不是x所属的slot,这个种情况下,这个slot一定不是队列头,还有别的关键字存在于队列中, 并且占用了x所属的slot step1:把x所占用的slot从 “以x所属的slot为头的队列”中移出 step2:释放s

文档评论(0)

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

教师资格证持证人

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

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档