计算机科学与编程导论模块15.ppt

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

*;主要内容; 查找与散列结构; 查找与散列结构; 查找与散列结构; 查找与散列结构; 查找与散列结构;静态查找 顺序表的查找:顺序查找 有序表的查找:折半查找 索引顺序表的查找:分块查找; 查找表 用线性表表示L1=(45,61,12,3,37,24,90,53,98,78) 用顺序表表示静态查找表 用线性链表表示静态查找表 查找方法:顺序查找;顺序表结构定义 struct SSTable { ElemType *elem; // 0号单元留空 int length; };;int Search_Seq ( SSTable ST, KeyType key ) { //在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0。 ST.elem[0].key = key; for ( i=ST.length; !EQ(key, ST.elem[i].Key); --i ); return i; // 若表中不存在待查元素, i=0 } //Search_Seq;例1:在下表中查找 key = 8 的结点。;特点 无排序要求; 存储结构:顺序、链式; ;查找表:用有序表表示 查找方法:折半查找(二分查找) 查找过程:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。 例:有原始查找表 {45,61,12,3,37,24,90,53,98,78} 为进行折半查找,需要先进行排序: L=(3,12,24,37,45,53,61,78,90,98);例:查找 Key=24 的记录。;int Search_Bin ( SSTable ST, KeyType key ) { //在有序表ST中折半查找法查找其关键字等于key的数据元素。若找到,则返回该元素在表中的位置,否则返回0。 low=1; high=ST.length; while ( low=high ) { mid=(low+high)/2; if EQ ( key, ST.elem[mid].key ) return mid; else if LT ( key, ST.elem[mid].key ) high=mid-1; else low=mid+1; } return 0; //表中不存在待查元素 }//Search_Bin;例1:在下表中查找 key = 9 的结点。;例2:在下表中查找 key = 5 的结点。;折半查找的特点 要求元素按关键字有序。 存储结构:顺序。 ;查找表的组织:分块索引,除表本身以外,尚需建立一个“索引表”。 查找方法:查找索引表;在数据块内顺序查找;查找方法比较;动态查找 二叉排序树:或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于根结点的值; (3)根结点的左、右子树也分别为二叉排序树。 ;二叉排序树的查找过程;在查找过程中,生成了一条查找路径:;“插入”操作在查找不成功时才进行; 例:利用插入算法建立二叉排序树 假设结点关键码的输入序列为{53,68,55 , 17 ,82,10,45},从空的二叉排序树开始,一个结点一个结点逐步插入,最终建立一个二叉排序树。;(1)被删除的结点是叶子; (2)被删除的结点只有左子树或者只有右子树; (3)被删除的结点既有左子树,也有右子树。; 删除原则:保持二叉排序树的特性。 设:P 为 F 的右孩子结点。;要删除二叉排序树中的P结点,分三种情况: P为叶子结点 P只有左子树或右子树 P左、右子树均非空; P为叶子结点,只需修改 P 双亲的指针: F-lchild=NULL F-rchild=NULL;P只有左子树或右子树 P只有左子树,用P的左孩子代替P (1)(2); P只有左子树或右子树 P只有右子树,用P的右孩子代替P (3)(4); p左、右子树均非空 沿 P 左子树的根 C 的右子树分支找到 S,S的右子树为空,将 S 的左子树成为 S 的双亲Q 的右子树,用 S 取代 p (5); P左、右子树均非空 若 C 无右子树,用 C 取代 P (6);要删除二叉排序树中的p结点,分三种情况: P为叶子结点,只需修改

文档评论(0)

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

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

1亿VIP精品文档

相关文档