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

时间:2026-01-20

数据结构

第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Ⅱ 码的大小 …… 此处隐藏:1507字,全部文档内容请下载后查看。喜欢就下载吧 ……

数据结构 第8章 查找(作业).doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219