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

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

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

相关文档