数据结构教学课件作者李学刚电子课件源代码单元7查找幻灯片.pptVIP

数据结构教学课件作者李学刚电子课件源代码单元7查找幻灯片.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(2)二次(平方)探查法:将哈希表T[0…n-1]看成是一个循环向量,若初始探查的地址为d(即H(key)=d),则探查序列为:d,d+l2,d-l2,d+22,d-22,…。即探查时从地址d开始,首先探查T[d],然后依次探查T[d+1] 直到T[n-1],此后又循环到T[0]直到T[d-1]为止。 (3)线性补偿探查法: 将线性探测的步长从1改为Q,即若初始探查的地址为d(即H(key)=d),则探查序列为:d,d+Q,d+2Q,d+3Q,…,而且要求Q与n是互质的, 以便能探测到哈希表中的所有单元。 【示例】设关键字集合为{47,7,29,11,16,95,22,8,3},哈希表表长为11,哈希函数为H(key)=key mod 11。 则哈希表如下: 图7-6 哈希表 哈希地址 关键字 11 22 47 3 16 95 7 29 8 0 1 2 3 4 5 6 7 8 9 10 【示例】设关键字集合为{47,7,29,11,16,95,22,8,3},哈希表表长为11,哈希函数为H(key)=key mod 11, Q=3。则构造哈希表的过程如下: 图7-7 哈希表 哈希地址 关键字 11 95 47 16 22 7 8 3 29 0 1 2 3 4 5 6 7 8 9 10 2.拉链法 拉链法解决冲突的做法:将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为n,则可将散列表定义为一个由n个头指针组成的指针数组T[0…n-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针。 【示例】设关键字集合为{47,7,29,11,16,95,22,8,3},哈希表表长为11,哈希函数为H(key)=key mod 11。则拉链法构造哈希表的过程如下: 图7-8 哈希表 哈希地址 关键字 ^ ^ ^ ^ ^ ^ 0 1 2 3 4 5 6 7 8 9 10 11 22 ^ 47 3 ^ 16 ^ 8 ^ 7 29 95 ^ 【课堂实践7-2】 已知关键字序列为(56,23,41,79,38,62,18),用哈希函数H(key)=key%11将其散列到哈希表HT[0…10]中: (1)采用线性探测法处理冲突,构造哈希表。 (2)采用拉链法处理冲突,构造哈希表。 做 一 做 引例分析与实现 1.引例分析 该系统的主要功能是对高校录取分数线等信息进行查询,高校信息主要包括:学校代码、学校名称和最低录取分数线,将各学校信息存放在一个文本文件中,由于高校信息可能需要随时添加,所以查找表可以看做是一个动态查找表,采用二叉排序树的存储结构实现查找较为恰当。 根据问题描述及系统应具备的功能,需要进行如下数据结构的描述和编写以下功能函数: (1)数据结构描述 typedef int KeyType; //关键字类型定义 typedef struct node { //结点类型 KeyType PM; //存放录取分数线 char SNum[6],SName[20]; //存放学校代码、学校名称 struct node *lchild,*rchild; //左右孩子指针 } BSTNode; typedef BSTNode *BSTree; //BSTree是二叉排序树的类型 (2)功能函数 ①二叉排序树插入新结点的(非递归算法)函数:BSTNode *InsertBST (BSTree *Tptr,FILE *fp),用于建立二叉排序树,向二叉排序树插入新结点,只需对本单元的相应函数做适当的修改; ②读高校信息文件,建立二叉排序树函数:int ReadFile(BSTree *T),该函数根据读入的高校信息,使用函数InsertBST建立二叉排序树; ③查找分数为PM的结点函数:BSTNode *SearchBST(BSTree T,int PM),用于实现第1项功能(按考生分数查询高校信息),只需对本单元的相应函数做适当的修改; ④中序遍历二叉排序树,实现输出函数:void InOrder(BSTree T,int PM1,int PM2,int k),用于实现第1至第3项功能中学校信息的输出,只需对中序遍历二叉树函数做适当的修改; ⑤打开系统帮助文件,显示文件信息:int help(),用于实现第5项功能(系统帮助); ⑥先序遍历二叉排序树,实现保存文件函数:void PreOrder(BSTree T,FILE *fp),按先序遍历将各学校信息保存到文件; ⑦退出系统前保存文件函数:int SaveFiles(BSTree T),该函数通过调用Pre

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档