数据结构(9章).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构讲义 9.2 静态查找表---基于线性表的查找 9.2.1 顺序查找 顺序查找又称线性查找,是最基本的查找方法之一。 查找思想:其查找方法为从表的一端开始,向另一端逐个按给定值kx与关键码进行比较,若找到,查找成功,并给出数据元素在表中的位置;若整个表检测完,仍未找到与kx相同的关键码,则查找失败,给出失败信息。 9.2.3 插值查找 1、差值查找 以下式取中间点: 2. 斐波纳契查找 按斐波纳契数列分割成两个不等的区间: 若表长n=F(k)-1,分割点为:mid=F(k-1)-1 9.2.4 分块查找 (1)例子:【例9-2】设关键码集合为: 14,31, 8, 22, 18, 43, 62,49,35, 52, 88, 78, 71,83 分析以上查找表中的数据有序么? 有什么规律? 查找表中的数据元素的关键字是按块有序的! (4)性能分析如下: 分块查找由索引表查找和子表查找两步完成。 设n个数据元素的查找表分为m个子表,且每个子表均为t个元素,则t=n/m。 若设在索引表上的查找也采用顺序查找,这样,分块查找的平均查找长度为: ASL=ASL索引表+ASL子表 (9-6) 以二叉链表作为二叉排序树的存储结构; 二叉链表结点的类型定义如下: typedef struct Node{ DataType data; struct Node *lchild,*rchild; }NodeType; 二叉排序树上的查找实现: 【算法9-4a】二叉排序树查找算法 NodeType * SearchData_1(NodeType *t, KeyType kx){ //在二叉排序树t上查找关键码为kx的元素 NodeType *p=t; while(p) //从根结点开始查找 { if (kx==p?data.key) return(p); //查找成功, 返回了结点地址。 if (kxp?data.key) p=p?lchild; //kx小于p的关键码,转左子树继续查找 else p=p?rchild; //kx大于p的关键码,转右左子树继续查找 } return NULL; //查找失败, 返回空指针。 } 【算法9-4】二叉排序树查找算法 int SearchData(NodeType *t,NodeType **p,NodeType **q,KeyType kx){ //在二叉排序树t上查找关键码为kx的元素, //若找到,返回1,且*q指向该结点,*p指向其父结点 //否则,返回0,且p指向查找失败前的最后一个结点 int flag=0; *p=NULL;*q=t; while (*q) if (kx(*q)-data.key) { *p=*q; *q=(*q)-rchild; } else if (kx(*q)-data.key) { *p=*q; *q=(*q)-lchild; } else { flag=1; break; } //查找成功,返回 return flag; } 【算法9-4b】二叉排序树查找算法(递归算法) NodeType * BST_Search2 (NodeType *t, keytype kx){ //在二叉排序树t上查找关键码为kx的元素 //若找到,返回所在结点的地址,否则返回空指针*/ if (t==NULL || t?data.key==kx) return(t); else if(kxt

文档评论(0)

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

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

1亿VIP精品文档

相关文档