计算机软件技术基础及实验指导 教学课件 ppt 作者 席晓慧 袁玲 第4章 数据结构.pptVIP

计算机软件技术基础及实验指导 教学课件 ppt 作者 席晓慧 袁玲 第4章 数据结构.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2、广度优先遍历 广度优先遍历是图的另一种遍历方法。其实现思路是: 访问图中的指定起始点v0; 从v0出发,依次访问v0的未被访问的邻接点w1,w2,w3,…,wn。然后依次访问w1,w2,w3,…,wn的未被访问的邻接点。 重复上面的第二步,直到所有顶点的邻接点都已访问为止。 图4.49中的G1以邻接表表示为图4.53,从此图中的顶点A(序号为0)出发,广度优先遍历图得出的序列为:013245或ABDCEF,从此图中的顶点E出发,广度优先遍历图得出的序列为:EBFACD。从顶点A出发的遍历过程如图4.56所示。 将一个连通图广度遍历过程中搜索成功所走过的边和顶点相连,则得到以遍历起始点为根的树,称这棵树为广度优先生成树,如图4.57所示。 图4.57 图G1的广度优先生成树 A B C D E F 广度优先遍历在实现过程中,需要设置一个队列,队列中记录刚刚访问过的顶点的序号,取出队头元素,将队头元素的所有未曾访问的邻接点进队,重复取队头元素和进队的操作,直到队空。 以邻接表作为存储结构,广度优先遍历算法如下: #define N 100 /* 图的顶点数 */ void traver_bfs(ADJLIST g[N],int v) { int visited[N], i; QUEUE Q; ANODE *p; for(i=0;iN;i++)visited[i]=0; /* visited[i]置0代表第i个顶点未访问 */ Q.rear= -1;Q.front=-1; /* 初始化队列为空 */ printf(“%d\n”,v); visited[v]=1; /* 从下标为v的顶点开始访问 */ addqueue(Q,v); while(Q.rear!=Q.front)) /* 队列未空时 */ { v=delqueue(Q);p=g[v].firarc; while(p!=NULL) { if (!visited[p-adjvex]) { printf(“%d\n”,p-adjvex); visited[p-adjvex]=1; addqueue(Q,p-adjvex); } p=p-next; } } } §4.6 查找 查找也称为检索,是从大量的数据中找出所需要的数据。查找与人们的日常生活有着密切的关系,如查字典、查电话号码、查阅图书等。查找的方法可以人工进行,也可以用计算机查找。用计算机查找首先要将原始数据整理成线性表,并按照一定的存储结构存储到计算机中去,然后编制算法进行查找。 由此可见,查找是在一个含有众多数据元素的查找表中找出某个特定的数据元素。为了便于讨论,引入“关键字”的概念。关键字是数据元素中每个数据项的值,用它可以标识一个数据元素。若此关键字可以唯一标识一个数据元素,则称此关键字为主关键字,反之称此关键字为次关键字。 查找是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素,若表中存在这样的数据元素,称此查找是成功的;若表中不存在关键字等于给定值的数据元素,称此查找是不成功的。 作为查找对象的表所具有的存储结构不同,其查找方法一般也不同,但无论哪一种方法,其查找过程都是用给定值与关键字按照一定的次序进行比较的过程,比较次数的多少就是相应算法的时间复杂度,它是衡量一个查找算法优劣的重要指标。对于一个查找算法的时间复杂度,既可以采用数量级的形式来表示,也可以采用平均查找长度(Average Search Length,简称ASL)来表示。平均查找长度是在查找成功的情况下的平均比较次数。平均查找长度的计算公式为: ASL= 其中,n为查找表的长度,即表中所含元素的个数,pi为查找第i个元素的概率,若不特别声明,则认为是等概率查找;ci为查找第i个元素所需要的比较次数。 前面曾说过,存储结构不同,其查找方法一般也不同,本节将讨论几种查找方法。 §4.6.1 静态查找 静态查找是在如下的表中进行查找,表中的数据元素类型相同,关键字类型相同,并且关键字可唯一标识数据元素。可用如下的方式定义表: #define N 10000 /* 表中元素的最大可能值 */ struct list {int key; /*为讨论方便,设关键字类型为整型量 */ othertype info; /* 除关键字之外的其它数据项 */ } typedef struct list LIST LIST L[N]; 1、 顺序查找 顺序查找是最常用的查找方法,其查找过程为:从第一个元素起,逐个将给定值与数据元素的关键字进行比较,若某个元

您可能关注的文档

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档