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