数据结构9-查找a.pptVIP

  • 19
  • 0
  • 约1.68万字
  • 约 65页
  • 2016-09-16 发布于山西
  • 举报
第9章 查找 静态表查找 顺序查找法,折半查找法,分块查找法 动态表查找 二叉排序树,平衡二叉树(AVL树), B_树和B+树 哈希(Hash)表及其查找 Hash函数 处理冲突 Hash表及其查找 9.0 与查找有关的术语: ● 查找表----由同一类型的数据元素(记录)组成的集合。 记作:ST={a1,a2,...,an} ● 查找表的操作 ● 生成查找表 ● 查找元素(记录)x在是否在表ST中 ● 查找元素(记录)x的属性 ● 插入新元素(记录)x ● 删除元素(记录)x ...... ● 查找----根据给定的某个关键字值,在查找表中确定一个其 关键字等于给定值的记录或数据元素。 设k为给定的一个关键字值,R[1..n]为n个记录的表,若 存在R[i].key=k,1≤i≤n,称查找成功;否则称查找失败。 ● 静态查找----查询某个特定的元素,检查某个特定的数据元 素的属性,不插入新元素或删除元素(记录) 。 ●?动态查找----在查找过程中,同时插入查找表中不存在的数 据元素(记录)。 ● 查找表的类型及其查找方法 (1) 静态查找表 ● 顺序表,用顺序查找法 ● 线性链表,用顺序查找法 ● 有序的顺序表,用折半查找法等 ● 索引顺序表/分块表,用分块查找法。 (2) 动态查找表 ● 二叉排序树,平衡二叉树(AVL树) **● B树, B+树, 健树 (3) 哈希(Hash)表 ● 平均查找长度(Average Search Length) 查找一个记录时比较关键字次数的期望值称为查找算法在查找成功时的平均查找长度。 n ASL=∑ PiCi i=1 n --- 为表中记录的个数 Pi --- 查找r[i]的概率,且∑ Pi=1 Ci --- 查找r[i]所需比较关键字的次数 9.1 静态查找表 9.1.1 顺序表与顺序查找法 1.顺序表的描述 例 元素(记录)类型 #define n 100 //表长100 struct arecord { keytype key ;//关键字类型 char name[6];//姓名 ...... //其它 } r[n+1]; //n+1个记录 其中:r[0]为监视哨; 记录按输入次序存入r[1..n]中。 3.算法设计 算法1:假定不使用监视哨r[0] 基本思想:将关键字k依次与记录的关键字 r[n].key,r[n-1].key,...,r[1].key 比较, 如果找到一个记录r[i],有r[i].key=k (1≤i≤n),则查找 成功,停止比较,返回记录的下标i;否则,查找失败,返回0。 int sequsearch(struct arecord r,int n,keytype k) { int i=n; //从第n个记录开始查找 while (i=1 k!=r[i].key) i--; //继续扫描 if (i) printf(”success\n”); //查找成功 else printf(”fail\n”); //查找失败 return i; //返回记录的下标i } 算法2:假定使用监视哨r[0] 基本思想:先将关键字k存入r[0].key,再将k依次与 r[n].key,r[n-1].key,...,r[1].key, r[0].key进行比较, 如果找到一个记录,有k=r[i].key, (0≤i≤n),则停止比较。 如果 i0,则查找成功;否则,查找失败。 int sequsearch(struct record r,int n,keytype k) { int i=n; //从第n个记录开始查找 r[0].key=k; //k填入r[0].key while( k!=r[i].key ) i-- ; //继续扫描 if (i!=

文档评论(0)

1亿VIP精品文档

相关文档