- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[语文]数据结构chapter 8 查找
* * Hash表的查找性能分析 从哈希表的查找过程可以看出 虽然哈希表在关键字和记录的存储位置之间建立了直接映象,但由于冲突的存在,使得哈希表的 查找过程仍然需要进行比较。 哈希表的查找取决于三个因素:哈希函数、冲突处理方法和哈希表的装填因子。 哈希表的装填因子定义为: 结论:在哈希函数和冲突处理方法均相同 的条件下,哈希表的查找性能取决于表的装填因子。从直观上看,装填因子越小,查找长度越小,反之越大,与关键字的数目无关。 * * 平衡二叉排序树元素插入算法(续1) (三)如果e的关键字小于BBST根结点的关键字,而且在BBST左子树中不存在和e相同关键字的结点,则将e插入到BBST的左子树上,并且在插入后的左子树的深度加1时分别就以下情况进行处理: 1)如果BBST的根节点的平衡因子为-1,则将BBST的平衡因子改为0,BBST的深度不变; 2)如果BBST的根节点的平衡因子为0,则将BBST的平衡因子改为1,BBST的深度加1; 3)如果BBST的根节点的平衡因子为1,则: ①如果BBST左子树的根节点的平衡因子为1,则需要进行单纯右旋处理,并且在右旋转后将BBST左子树根节点的平衡因子改为0,树的深度不变。 ②如果BBST左子树根节点的平衡因子为-1,则需要先进行左旋、后右旋处理,并且在旋转后修改BBST的根节点、左右子树根节点的平衡因子,树的深度不变。 * * 平衡二叉排序树元素插入算法(续1) (四)如果e的关键字大于BBST的根结点的关键字,而且在右子树中不存在和e相同关键字的结点,则将e插入到BBST的右子树上,并且在插入后的右子树的深度加1时分别就以下情况进行处理: 1)如果BBST的根节点的平衡因子为1,则将BBST的平衡因子改为0,BBST的深度不变; 2)如果BBST的根节点的平衡因子为0 ,则将BBST的平衡因子改为-1,BBST的深度加1; 3)如果BBST的根节点的平衡因子为-1,则: ①如果BBST右子树的根节点的平衡因子为-1,则需要进行单纯左旋处理,并且在左旋转后将BBST右子树根节点的平衡因子改为0,树的深度不变。 ②如果BBST右子树的根节点的平衡因子为1,则需要先进行右旋、后左旋处理,并且在旋转后修改BBST的根节点、左右子树根节点的平衡因子,树的深度不变。 * * 二叉平衡树节点C实现 Typedef struct BSTNode { ElemType data; int bf; //平衡因子 struct BSTNode *lchild,*rchild; }BSTNode, *BSTree; #define LH +1 #define EH 0 #define RH -1 * * 二叉平衡树的插入算法(空处理) Status InsertAVL(BSTree T,ElemType e, Boolean taller){ if (!T) { //插入新节点,树长高 T=(BSTree)malloc(sizeof(BSTNode)); T-data = e; T-lchild = T-rchild = NULL; T-bf = EH; taller = TRUE; } else { //非空的情况处理 } * * 二叉平衡树的插入算法(左子树) if (EQ(e.key,T-data.key) {taller=FALSE;return 0;} if LT(e.key,T-data.key) { //再左子树上插入 if (!InsertAVL(T-lchild,e,taller)) return 0; if (taller) { switch (T-bf) { case LH: LeftBalance(T);taller=FALSE;break; case EH: T-bf = LH;taller = TRUE;break; case RH: T-bf = EH; taller = FALSE; break; } } } * * 二叉平衡树的插入算法(右子树) else { if (!InsertAVL(T-rchild,e,taller)) return 0; if (taller) { switch(T-bf) { case LH: T-bf = EH;taller = FALSE;break; case EH: T-bf = RH;taller = TRUE;break; case RH: RightBalance(T);taller=FALSE;break; } // end of switch } //end of if (taller)
文档评论(0)