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

新计算机软件技术基础及实验指导 教学课件 席晓慧 袁玲 第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文档。上传文档
查看更多
排序方法 平均时间复杂度 最坏情况 空间复杂度 是否稳定 选择排序 O(n2) O(n2) O(1) 不稳定 插入排序 O(n2) O(n2) O(1) 稳定 冒泡排序 O(n2) O(n2) O(1) 稳定 快速排序 O(nlog2n) O(n2) O(1) 不稳定 归并排序 O(nlog2n) O(nlog2n) O(n) 稳定 下面就几种排序方法进行比较: 深度优先遍历在实现过程中,需要设置一个栈,栈中记录刚刚访问过的顶点的序号,找出栈顶元素的第一个未曾访问的邻接点进栈,一旦某一顶点的邻接点均已访问,则将其从栈顶弹出,直到栈空。 以邻接表作为存储结构,深度优先遍历算法如下: #define N 100 /* 图的顶点数 */ void traver_dfs(ADJLIST g[N],int v) { int visited[N], i; STACK s; ANODE *p; for(i=0;iN;i++)visited[i]=0; /* visited[i]置0代表第i个顶点未访问 */ s.top= -1; /* 初始化栈为空 */ printf(“%d\n”,v); visited[v]=1; /* 从下标为v的顶点开始访问 */ push(s,v); p=g[v].firarc; /* p 为v的第一邻接结点 */ while((p!=NULL)||(top!=-1)) { while(p!=NULL) if (visited[p-adjvex]) p=p-next; else { printf(“%d\n”,p-adjvex); visited[p-adjvex]=1; push(s,p-adjvex); p=g[p-adjvex].firarc; } if (top!= -1) { v=pop(s); p=g[v]-firarc; p=p-next; } } } 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 查找 查找也称为检索,是从大量的数据中找出所需要的数据。查找与人们的日常生活有着密切的关系,如查字典、查电话号码、查阅图书等。查找的方法可以人工进行,也可以用计算机查找。用计算机查找首先要将原始数据整理成线性表,并按照一定的存储结构

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档