第11章_索引结构和 散列技术.pptVIP

  • 2
  • 0
  • 约7.79千字
  • 约 34页
  • 2016-01-23 发布于江苏
  • 举报
第11章_索引结构和 散列技术.ppt

第11章 索引结构与散列技术 第11章 索引结构与散列技术 查找的基本概念 索引结构 散列技术 习题 查找的基本概念 查找:给定值k,在n个记录中查找一个其关键字等于给定值的记录。若存在这样一个记录,则查找成功;否则查找失败。 关键字:数据元素中某个数据项的值,用以标识一个数据元素。 主关键字:可唯一地标识一个数据元素的关键字。 次关键字:用以识别若干记录的关键字。 使用基于主关键字的查找,查找结果应是唯一的。 线性表的查找 顺序查找(线性查找) 查找过程:从表的一端开始查找,顺序用各记录的关键字与给定值x进行比较,若找到与其值相等的元素,则查找成功,给出该记录在表中的位置;否则,若直到最后一个记录仍未找到关键字与x相等的对象,则查找失败。 线性表可以是顺序存储结构或链式存储结构,可以是有序表或无序表。 二分查找(折半查找) 线性表必须是顺序存储结构,并且是有序表。具体查找方法在第12章中介绍。 顺序查找算法 typedef struct { keytype key; //关键字 datatype other; // 其他域 } table; table R[n+1]; int SEQSEARCH(table R[ ], keytype k) // 在R中从后向前顺序查找关键字为k的结点 // 查找成功,函数返回向量下标,失败返回?1 { int i; R[0].key=k; // R[0]作为监视哨使用 i=n; // 从表尾开始向前扫描 while (R[i].key!=k) i--; if (i==0) return(?1); //若i等于0,则是监视哨本身的比较使循环结束 else return i; } // SEQSEARCH 算法分析 表中原始关键字: 26 5 37 1 61 11 59 15 48 19 输入希望查找的关键字值: k=37 R[0].key=37 第一次查找:R[10].key= 19 ,不等于k,继续查找 第二次查找:R[ 9].key= 48 ,不等于k ,继续查找 第三次查找:R[ 8].key= 15,不等于k,继续查找 第四次查找:R[ 7].key= 59 ,不等于k,继续查找 第五次查找:R[ 6].key= 11 ,不等于k ,继续查找 第六次查找:R[ 5].key= 61 ,不等于k ,继续查找 第七次查找:R[ 4].key= 1 ,不等于k ,继续查找 第八次查找:R[ 3].key= 37,等于k,查找成功 查找结果:要查的数据在表中的3号位置。 输入希望查找的关键字值: k=25 R[0].key=25 第1次查找:R[10].key= 19 ,不等于k,继续查找 第2次查找:R[ 9].key= 48 ,不等于k ,继续查找 第3次查找:R[ 8].key= 15,不等于k,继续查找 第4次查找:R[ 7].key= 59 ,不等于k,继续查找 第5次查找:R[ 6].key= 11 ,不等于k ,继续查找 第6次查找:R[ 5].key= 61 ,不等于k ,继续查找 第7次查找:R[ 4].key= 1 ,不等于k ,继续查找 第8次查找:R[ 3].key= 37 ,不等于k ,继续查找 第9次查找:R[ 2].key= 5 ,不等于k ,继续查找 第10次查找:R[ 1].key= 26 ,不等于k ,继续查找 第11次查找:R[ 0].key= 25 ,等于k ,查找失败 11.1 索引结构 索引结构包括两部分:索引表和数据表 索引表指示结点与其存储位置之间的关系,每个索引项包括关键字和地址。 数据表存储结点信息。 11.1.1 线性索引 线性索引:索引表为线性表 稠密索引:每个索引项对应数据表中的一个记录 稀疏索引:每个索引项对应数据表中的一组记录 若索引表是顺序存储结构并且是有序表,对索引表可以采用顺序查找或折半查找。 分块查找 分块查找也称索引顺序查找。进行分块查找时,除数据表本身以外,尚需建立一个“索引表”。 数据表有序或者分块有序。“分块有序”是指第i+1个子表中所有记录的关键字值均大于第i个子表的,而块内无

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档