第九章静态查找表.ppt
文本预览下载声明
第九章静态查找表 第一页,共三十八页,2022年,8月28日 何谓查找表 ? 查找表是由同一类型的数据元素(或记录)构成的集合。 由于“集合”中的数据元素之间存在着松散的关系,因此查找表是一种应用灵便的结构。 第二页,共三十八页,2022年,8月28日 对查找表经常进行的操作: 1)查询某个“特定的”数据元素是否在查找表中; 2)检索某个“特定的”数据元素的各种属性; 3)在查找表中插入一个(不存在的)数据元素; 4)从查找表中删去某个(已经存在的)数据元素。 第三页,共三十八页,2022年,8月28日 仅作查询和检索操作的查找表。 静态查找表 有时在查询之后,还需要将“查询”结果为“不在查找表中”的数据元素插入到查找表中;或者,从查找表中删除其“查询”结果为“在查找表中”的数据元素。 动态查找表 查找表可分为两类: 第四页,共三十八页,2022年,8月28日 是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。 关键字 若此关键字可以识别唯一的一个记录,则称之谓“主关键字”。 若此关键字能识别若干记录,则称 之谓“次关键字”。 第五页,共三十八页,2022年,8月28日 查找(搜索 、 Search) 所谓查找,就是在数据集合中寻找满足某种条 件的数据对象。 查找的结果通常有两种可能: 查找成功,即找到满足条件的数据对象。这时,作为结果,可报告该对象在结构中的位置,还可进一步给出该对象中的具体信息。 查找不成功,或搜索失败。作为结果,也应 报告一些信息,如失败标志、失败位置等。 通常称用于搜索的数据集合为查找表,它是由同一数据类型的对象(或记录)组成。 第六页,共三十八页,2022年,8月28日 由于查找表中的数据元素之间不存在明显的组织规律,因此不便于查找。 为了提高查找的效率, 需要在查找表中的元素之间人为地 附加某种确定的关系,换句话说,用另外一种结构来表示查找表。 如何进行查找? 查找的方法取决于查找表的结构。 第七页,共三十八页,2022年,8月28日 衡量一个搜索算法的时间效率的标准是: 在搜索过程中关键码的平均比较次数,这个标准也称为平均搜索长度ASL(Average Search Length),通常它是搜索结构中对象总数 n 或文件结构中物理块总数 n 的函数。 另外衡量一个搜索算法还要考虑算法所需要的存储量和算法的复杂性等问题。 第八页,共三十八页,2022年,8月28日 9.1 静态查找表 9.2 动态查找树表 9.3 哈希表 第九页,共三十八页,2022年,8月28日 9.1 静 态 查 找 表 第十页,共三十八页,2022年,8月28日 数据对象D: 数据关系R: D是具有相同特性的数 据元素的集合。每个数 据元素含有类型相同的 关键字,可唯一标识数 据元素。 数据元素同属一个集合。 ADT StaticSearchTable { 第十一页,共三十八页,2022年,8月28日 Create(ST, n); Destroy(ST); Search(ST, key); Traverse(ST, Visit()); 基本操作 P: } ADT StaticSearchTable 第十二页,共三十八页,2022年,8月28日 构造一个含n个数据元素 的静态查找表ST。 Create(ST, n); 操作结果: 第十三页,共三十八页,2022年,8月28日 销毁表ST。 Destroy(ST); 初始条件: 操作结果: 静态查找表ST存在; 第十四页,共三十八页,2022年,8月28日 若 ST 中存在其关键字等于 key 的数据元素,则函数值为该元素的值或在表中的位置,否则为“空”。 Search(ST, key); 初始条件: 操作结果: 静态查找表ST存在,key 为和查找表中元素的关键字类型相同的给定值; 第十五页,共三十八页,2022年,8月28日 按某种次序对ST的每个元素调用函数Visit()一次且仅一次,一旦Visit()失败,则操作失败。 Traverse(ST, Visit()); 初始条件: 操作结果: 静态查找表ST存在,Visit 是对元素操作的应用函数; 第十六页,共三十八页,2022年,8月28日 typedef struct { // 数据元素存储空间基址,建表时 // 按实际长度分配,0号单元留空 int length; // 表的长度 } SSTable; 假设静态查找表的顺序存储结构为 Ele
显示全部