《数据结构(C语言描述)》完整版教学课件全书电子教案.ppt

《数据结构(C语言描述)》完整版教学课件全书电子教案.ppt

  1. 1、本文档共282页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二叉排序树的查找过程(递归查找过程): 查找一个给定值为k的结点,若二叉树不为空,首先将它与根结点进行比较,若K与根结点相等,查找成功;若K小于根结点,则表示若K存在,应在其左子树中;否则若K存在,应在其右子树中。对左、右子树同样按上述过程先与子树的根结点进行比较,根据比较的结果定下一步的操作。若在查找过程中遇到叶子结点,还没有找到待找结点,则表示二叉排序树中不存在该结点,查找不成功。 实现算法: (略) 时间复杂度: 分析:在二叉排序树上进行查找的过程中,根结点为待查结点时,给定值同树中结点的比较次数仅为一次,待查结点位于最后一层时,比较的次数为树的深度。 普通情况下,对二叉排序树进行查找的时间复杂度为O( ); 最差情况下(二叉排序树为一棵单支树),其时间复杂度为O(n)。 8.3.2 二叉平衡树 二叉平衡树(AVL树): 或者是一棵空树,或者是一棵具有如下性质的非空二叉树: 它的左子树和右子树都是二叉平衡树,且左子树和右子树的深度之差的绝对值不大于1。二叉平衡树中结点的左子树的深度减去它的右子树的深度的值定义为平衡因子BF,则BF的值只可能为-1、0和1。 对二叉排序树插入结点而构造平衡二叉树的规律: 设最小子树根结点的指针为a,则失去平衡后进行调整的规律: LL型:单向右旋平衡处理 RR型:单向左旋平衡处理 LR型:双向旋转(先左后右)平衡处理 RL型:双向旋转(先右后左)平衡处理 时间复杂度: 在查找过程中和给定值进行比较的关键字的个数不超过树的深度,所以,在二叉平衡树上进行查找的时间复杂度为O(log2n)。 8.4 散列查找 8.4.1 散列存储和散列函数的构造方法 8.4.2 解决冲突的方法 8.4.3 散列查找实现算法和性能分析 8.4.1 散列存储和散列函数构造 基本术语: 散列存储:以数据中每个元素的关键字K为自变量,通过一个函数f(k)计算出函数值,把这个值同存储空间中一个唯一的存储位置相对应,将该元素存储到这个存储位置中。函数f(k)称为散列函数或哈希函数。f(k)的值称为散列地址或哈希地址;进行散列存储的地址空间称为散列表或哈希表。 冲突:实际应用中,由于散列函数的构造方法不同,常会出现多个元素同时占用一个存储单元的情况,即散列地址相同,这种现象叫冲突。具有相同函数值的不同关键字的元素,称为同义词。 常用的构造散列函数的方法: 直接定址法 数字分析法 平方取中法 折叠法 除留余数法 8.4.2 解决冲突的方法 常用的解决冲突的方法有以下几种: 开放定地址 链地址法 从发生冲突的那个单元开始,按照一定次序,从散列表中查找出一个空闲存储单元,把发生冲突的待插入元素存入到该单元中的一类解决冲突的方法。设H(key)为散列函数,m为散列表长度。则开放定址法中找下一个空闲空间的散列函数为:Hi=(H(key)+ di)%m 其中,i=1,2…k; di称为增量,以di的取值分为以下三种: (1)di=1,2,3…m-1,称线性探测再散列。 (2)di=12,-12,22,-22,…±k2,(k≤m/2)称二次探测再散列。 (3)di=随机数序列,称为随机探测再散列。 开放定址法: void bfs(adjmatrix Ga,int i,int n) //从顶点i开始遍历,图共有n个顶点 { int j,k; Queue Q; InitQueue(Q); //初始化队列 printf(%3d,i); visited[i]=1; Enqueue(Q,i); //进队 while(!QEmpty(Q)) //判断队列是否为空 { k= Dlqueue(Q); //出队 for(j=0;jn;j++) if(Ga[k][j]!=0!visited[j]) { printf(%3d,j); visited[j]=1; Enqueue(Q,j); }}} 广度优先搜索遍历的算法(邻接矩阵): 7.5 最小生成树 7.5.1 克鲁斯卡尔算法 7.5.2 普里姆算法 在一个连通图G中,如果取它的全部顶点和一部分边构成一个子图G',即: 若边集E(G')中的边,将图中的所有顶点连通又不形成回路,则称子图G'是原图G的一棵生成树。 生成树中存在n个顶点,则必包含有n-1条边,所有的顶点都是连通的。 一个图可以有不同的生成树,生成树不是唯一的。 一个连通网(即连通带权图,

您可能关注的文档

文档评论(0)

你找对了 + 关注
实名认证
内容提供者

正版课件均可编辑 注意:其它人很多盗版P P T都是图片形式,买到请直接投诉退款!

1亿VIP精品文档

相关文档