国防《数据结构》(C语言描述)教学资料包 教学课件 第7章.pptVIP

  • 15
  • 0
  • 约1.38万字
  • 约 87页
  • 2021-12-07 发布于湖北
  • 举报

国防《数据结构》(C语言描述)教学资料包 教学课件 第7章.ppt

本章概述 “查找”是日常生活中常有的事,人们几乎每天都要做“查找”工作。例如,在电话号码簿中查找某单位或某人的电话号码;在阅读文献时查阅字典以确定某个词的含义;在程序设计中,查找也是一种常用的基本运算,如编译程序中符号表的查找、信息处理系统中信息的查找等。因此,如何高效率地实现查找运算是查找表的基本问题,也是本章的重点内容。 7.1 基本概念与术语 关键字:是数据元素(或记录)中某个数据项的值,用它可以标识(识别)一个数据元素(或记录)。 若此关键字可以唯一地标识一个记录,则称此关键字为主关键字(primary key),不同的记录其主关键字不同,反之,称用以识别若干记录的关键字为次关键字(secondary key)。 查找(searching):根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素。 7.2 顺序表的查找 当顺序表作为线性表的存储结构时,存储结点间的位置关系与对应数据元素之间的逻辑关系(邻接关系)是一致的,即数据元素在线性表中的次序与它们在顺序表中次序相同。 顺序表的存储结构如下: typedef strict { ElemType *elem; // 存储空间基址,建表时按照实际长度分配,0号单元不用 int length; // 顺序表长度 }STable; 查找可分为静态查找和动态查找两大类。 静态查找是指在查找时只对数据元素进行查询和检 索。 动态查找除包括静态查找的要求外,还包括插入数 据元素集合中不存在的数据元素,或者从数据元素集合 中删除已存在的某个数据元素。 静态查找时构造的存储结构称作静态查找表。 动态查找时构造的存储结构称作动态查找表。 顺序查找适用于线性表的顺序存储结构,也适用于链式存储结构,表内的数据元素是无序的。 顺序查找的查找过程为: 从顺序表中的最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较后相等,则查找成功,找到所查记录;如果直至第一个记录,关键字和给定值比较都不等,则表明表中没有所查找的记录,查找失败。 查找算法描述如算法7.1所示。 int Search_Seq(STable ST, KeyType key) { // 在顺序表ST中顺序查找其关键字等于key的数据元素 i=0; ST.elem[0].key=key; // 设置监视哨 for (i=ST.length; ST.elem[i].key!=key; --i); // 从后往前找 retirn i; // 找不到时,i为0 } // Search_Seq 算法 7.1 在查找之前先将ST.elem[0]的关键字赋值key,则ST.elem[0] 在此起到了哨兵的作用。目的是避免在查找的每一步都要判断整个表是否查找完毕,即在for循环中省去了判定下标越界的条件,提高了算法的效率。ST.elem[i].key表示第i个记录的关键字,ST.length表示顺序表中元素的个数,key为查找的对象。 查找算法的基本操作也就是“将记录的关键字和给定值进行比较”,比较的次数依赖于这个数据元素在结构中所处的位置。 为了确定要查找的记录位置,与给定值进行比较的关键字个数的期望值称为查找算法在查找成功时的平均查找长度ASL(average search length)。对于含有n个记录的表,平均查找长度的计算公式为: 其中,Pi为查找第i个记录的概率, ; Ci为在表中找到其关键字与给定值相等的第i个记录时,和给定值已进行过比较的关键字个数。一般情况下,Ci等于n﹣i+1。 若查找每个元素的概率相同,即为P1=P2 =… =Pn =1/n。对于等概率的查找,其平均查找长度的计算公式可简化为: ASL = = = = 查找算法的平均查找长度应是查找成功时的平均查找长度与查找不成功时的平均查找长度之和的一半。如果查找不成功,比较次数为n+1。假设查找成功与不成功的可能性相同,则 ASL = = 折半查找又称为二分查找,是一种效率较高的查找方法,它要求线性表的结点必须是按关键字非递减(或非递增)

文档评论(0)

1亿VIP精品文档

相关文档