教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 专业资料 >

数据结构 第8章 查找(作业)

来源:网络收集 时间:2026-08-28
导读: 数据结构 第8章 查找 第8章 查找8.1 查找的基本概念 8.2 静态查找表 8.3 动态查找表 8.4 哈希表 数据结构 第8章 查找 8.1 查找的基本概念关键字:数据元素的某个数据项的值,用它可以标识列表 中的一个或一组数据元素。如果一个关键字可以唯一标识列表 中

数据结构

第8章 查找

第8章 查找8.1 查找的基本概念 8.2 静态查找表 8.3 动态查找表 8.4 哈希表

数据结构

第8章 查找

8.1 查找的基本概念关键字:数据元素的某个数据项的值,用它可以标识列表 中的一个或一组数据元素。如果一个关键字可以唯一标识列表 中的一个数据元素, 则称其为主关键字,否则为次关键字。

当数据元素仅有一个数据项时, 数据元素的值就是关键字。

数据结构

第8章 查找

查找:根据给定的关键字值,在查找表中确定一个其关键 字与给定值相同的数据元素,并返回该数据元素在查找表中的 位置。若找到相应的数据元素,则称查找是成功的,否则称查

找是失败的,此时应返回空地址及失败信息,并可根据要求插入这个不存在的数据元素。

数据结构

第8章 查找

8.2 静态查找表8.2.1 顺序查找法顺序查找法的过程是:从表中最后一个记录开始,逐个进 行记录的关键字和给定值的比较,若某个记录的关键字和给定 值比较相等,则查找成功,否则查找失败。存储结构通常为顺 序结构,也可为链式结构。

数据结构

第8章 查找

//静态查找表的顺序存储结构 typedef struct { ElemType *elem; //数据元素存储空间基址,建 //表时按实际长度分配,0号单元留空 int length; //表长度 } SSTable;

数据结构

第8章 查找 基于顺序结构的算法如下: 

int Search_Seq(SSTable ST, KeyType key)

{ // 在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0。算法9.1 int i; ST.elem[0].key=key; // 哨兵

for(i=ST.length;!EQ(ST.elem[i].key,key);--i); // 从后往前找

return i;}

// 找不到时,i为0

其中ST.elem[0]称为监视哨,可以起到防止越界的作用。

数据结构

第8章 查找

8.2.2 有序表的查找折半查找法又称二分法查找法,这种方法适用于有序表。

其基本过程是:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成 前、后两个子表,如果中间位置记录的关键字大于查找关键字, 则进一步查找前一子表,否则进一步查找后一子表。重复以上 过程,直到找到满足条件的记录,使查找成功,或直到子表不

存在为止,此时查找不成功。

数据结构

第8章 查找

图8.1 折半查找示意图

数据结构

第8章 查找 折半查找的算法如下: int Search_Bin(SSTable ST, KeyType key) { // 在有序表ST中折半查找其关键字等于key的数据元素。若 找到,则函数值为该元素在表中的位置,否则为0。算法9.2 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; // 顺序表中不存在待查元素 }

数据结构

第8章 查找

8.2.3 索引顺序表的查找(分块查找法)分块查找法要求将列表组织成以下索引顺序结构:  首先将列表分成若干个块(子表)。一般情况下,块的长度 均匀,最后一块可以不满。每块中元素任意排列,即块内无 序,但块与块之间有序。 

构造一个索引表。其中每个索引项对应一个块并记录每块 的起始位置,以及每块中的最大关键字(或最小关键字)。 索引表按关键字有序排列。

数据结构

第8章 查找 下图的索引顺序表包括三个块,第一个块起始地址0,块内 最大关键字25;第二个块起始地址为5, 块内最大关键字 58;第三个块起始地址为10,块内最大关键字为88。 

索引表 25 58 88

各块内的最大关键字 各块的起始地址

列表 18 14 12 25 0 1 2 3

8 4

28 32 45 36 58 60 88 71 5 6 7 8 9 10 11 12

图8.2 分块查找法示意图

数据结构

第8章 查找 分块查找的基本过程如下: 

(1) 首先将待查关键字K与索引表中的关键字进行比较,以确定待查记录所在的块。具体的可用顺序查找法或折半查

找法进行。 (2) 用顺序查找法在相应块内查找关键字为K的元素。 例如,在上述索引顺序表中查找36。首先,将36与索引 表中的关键字进行比较,因为25<36≤58,所以36在第二个块 中, 进一步在第二个块中顺序查找, 最后在8号单元中找到 36。

数据结构

第8章 查找

8.3 动态查找表动态查找表的特点是表结构本身是在查找过程中动态生成 的,即对于给定值key,若表中存在其关键字等于key的记录,

则查找成功返回,否则插入关键字等于key的记录。主要包括二叉排序树、 平衡二叉树等。

数据结构

第8章 查找 8.3.1 二叉排序树 二叉树排序树或者是一棵空树,或者是具有如下性质的二叉

树:(1)若它的左子树非空,则左子树上所有结点的值均 小于根结点的值;  (2)若它的右子树非空,则右子树上所有结点的值均 大于根结点的值; 

(3)它的左右子树也分别为二叉排序树。

数据结构

第8章 查找

5 2 1 3 4 7 6 8 9CHEN

CAO

ZHA O DING

WA NG

(a) 二叉排序树示例 1

(b) 二叉排序树示例 2(根据字符 ASCⅡ 码的大小 )

图8.3 二叉排序树

数据结构

第8章 查找 在下面讨论的二叉排序树的操作中,使用二叉链表作 为存储结构,其结点结构说明如下:typedef struct node

{ KeyType key ;

//关键字的值

struct node *lchild, *rchild; //左右指针 }BSTNode, *BSTree;

数据结构

第8章 查找 1. 二叉排序树的插入和生成 已知一个关键字值为key的结点s, 若将其插入到二叉排序 树中,只要保证插入后仍符合二叉排序树的定义即可。插入可 以用下面的方法进行: ① 若二叉排序树是空树,则key成为二

叉排序树的根;② 若二叉排序树非空, 则将key与二叉排序树

的根进行比较,如果key的值等于根结点的值,则停止插入;如果key的值小于根结点的值,则将key插入左子树;如果key

的值大于根结点的值,则将key插入右子树。

数据结构

第8章 查找45 45 ( a) 空树 45 24 12 ( e ) 插入 12 53 12 24 28 ( f ) 插入 28 ( b) 插入 45 45 53 12 24 28 ( g ) 插入 90 24 ( c) 插入 24 24 45 53

( d) 插入 53 45 53 90

图8.4 二叉排序树的建立过程

数据结构

第8章 查找

24 12 28 53 90

45图8.5 输入顺序不同所建立的不同二叉排序树

数据结构

第8章 查找 2. 二叉排序树的删除

从二叉排序树中删除一个结点,不能把以该结点为根的子树都删去,只能删掉该结点,并且还应保证删除后所得的

二叉树仍然满足二叉排序树的性质不变。也就是说,在二叉排序树中删去一个结点相当于删去有序序列中的一个结点。 删除操作首先要查找,已确定被删结点是否在二叉排序 树中。若不在,则不做任何操作;否则,假设要删除的结点 为p,结点p的双亲结点为f,并假设结点p是结点f的左孩子 (右孩子的情况类似)。

…… 此处隐藏:2122字,全部文档内容请下载后查看。喜欢就下载吧 ……

数据结构 第8章 查找(作业).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/267117.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)