- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LL型失衡特点为:A-bf=2,B-bf=1。相应调整操作可用如下语句完成: B=A-lchild;A-lchild=B-rchild;B-rchild=A; A-bf=0;B-bf=0; A B A B BL BL BR AR S AR S (b)调整后恢复平衡 (a)插入新结点S后失去平衡 二叉排序树的LL型平衡旋转 2 1 0 0 H-1 H-1 H BR 最后,将调整后的二叉排序树的根结点B“接到”A处。 令A原来的父指针为FA如果FA非空,则用B代替A做 FA的左子树或者右子树;否则原来A就是根结点,此 时应该令根指针t指向B。相应调整操作可用如下语句 if(FA==NULL) t=B; else if (A==FA-lchild) FA-lchild=B; else FA—rchild=B; LR型: 由于在A的左子树的B的右子树上插入结点,使A的 平衡因子由1增至2而失去了平衡,需进行两次旋转 操作(先逆时针,后顺时针),如图所示。 随机数法 构造:取关键字的随机函数值作散列地址,即H(key)=random(key) 适于关键字长度不等的情况 选取散列函数,考虑以下因素: ⑴ 计算散列函数所需的时间( 包括硬件指令的因素 ); ⑵ 关键字的长度; ⑶ 散列表的大小; ⑷ 关键字的分布情况; ⑸ 记录的查找频率 1、开放定址法: 方法:当冲突发生时,形成一个探查序列;沿此序列逐个地址探查,直到找到一个空位置(开放的地址),将发生冲突的记录放到该地址中,即Hi=(H(key)+di)MOD m,i=1,2,……k(k?m-1) 其中:H(key)——散列函数 m——散列表表长 di——增量序列 9.3. 3 处理冲突的方法 分类: 线性探测再散列:di=1,2,3,……m-1 二次探测再散列:di=12,-12,22,-22,32,……±k2(k≤m/2) 伪随机探测再散列:di=伪随机数序列 例 表长为16的散列表中已填有关键字为19,70,33和38的记录,H(key)=key MOD 13, 现有第五个记录,其关键字为25, H(25)=12 38 33 19 70 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 冲突 25 不冲突 线性探测再散列 插入第六个记录,其关键字为18 , H(18)=5 冲突 线性探测再散列 冲突 冲突 不冲突 18 用二次探测再散列 不冲突 伪随机探测再散列 不冲突 18 18 2、再散列法 方法:构造若干个散列函数,当发生冲突时,计算下一个散列地址,即:Hi=Rhi(key) i=1,2,……k 其中:Rhi——不同的散列函数。 特点:计算时间增加。 3、链地址法: 方法:将所有关键字为同义词的记录存储在同一线性链表中并用一维数组存放头指针 用链地址法解决冲突的散列造表算法 : #include iostream.h #define listlen 13 struct record { int key; record *next; }; typedef record RECF[listlen]; int modh (int ); //Hash函数(除留余数法) void chainh(int ,RECF ,int (*hash)(int )); prhashlist(RECF ); //输出散列表 void main(void) { int i,x; RECF r; for(i=0;ilistlen;i++){ r[i].key=0; r[i].next=NULL; } cinx; while(x){ chainh(x,r,modh); cinx; } prhashlist(r); } // 其中参数int(*hash)(int)是指向函数的指针,它返回一个整数(散列地址) //用链地址法解决冲突的散列造表算法 //根据(*hash)函数造散列表 void chainh(int k,RECF r,int (*hash)(int)) { int addr; record *p,*q; //用链地址法解决冲突 addr=(*hash)(k); if (!r[addr].key)r[addr].key=k; else if(r[addr].key!=k) {p=r[addr].next; q=r[addr]; while(p p-key!=k) { q=p; p=p-next; } if(!p){ p=new record; p-key=k; p-next=NULL; q-next=p; } } } int modh
您可能关注的文档
最近下载
- L1基础自动化系统的铁区MES的实现.docx VIP
- 2025年山东普通高中学业水平等级考试生物真题及答案 - 副本 .pdf VIP
- PEMS相关模板(PEMS软件开发计划或开发生命周期&可编程医用电气系统(PEMS)检查文件清单).pdf VIP
- 旅游接待业 课件全套 第1--10章 旅游接待业导论---旅游接待业高质量发展.pptx
- 运维服务项目实施组织及管理措施.docx VIP
- 柔性器件材料与结构失效分析.pptx VIP
- IPC-9850中文版.doc
- 2025年四川自贡市中考英语试卷含答案.docx VIP
- 2019年国庆70周年阅兵装备解读报告.pptx
- 2024人教版PEP英语三年级上册全册教学设计教案含反思.pdf
文档评论(0)