S第十九讲(图的存储结构).pptVIP

  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文档。上传文档
查看更多
S第十九讲(图的存储结构)

数据结构与算法 ---第十九讲 北方民族大学 计算机科学与工程学院 王伦津 研究员 19、图的存储结构,邻接矩阵法、邻接表、十字链表和邻接多重表 目 录 本讲小结 思考与练习 十字链表的顶点结点,是在前面给出的抽象结点TGraphNode0的基础上,增加指向相应的第一条射入边和第一条射出边的指针而成,具体的C++描述如下: template class TElem structTGraphNodeCrossLink: public TGraphNode0 TElem { TGraphEdge *firstOut; //指向第一条射出边 TGraphEdge *firstIn; //指向第一条射入边 //下面是其他成员的声明,同TGraphNode0,此处 不重载,故不给出 } 至于代表整个图的类,是从TGraph0派生而来,并增加头数组作为成员,以便访问整个十字链表。 const int CNST_NumNodes; template class TELem, class TEdgeElem //用到两个可变类型,分别是图结点内容和边内容 class TGraphCrossLink: public TGraph0TElem, TEdgeElem { public: TGraphNodeCrossLinkTElem nodes [CNST_NumNodes] //存放图结点的一维数组 //下面是其他成员的声明,同TGraph0,此略(但 实际上机时不可省略) } (三) 结构与算法实现的考虑 图的十字链表是对图的邻接表的一种扩展,与邻接表相同的是,它也是对每条边设立一个链表结点。但不同的是,它的链表结点增设了一个用于将终点相同的弧链接在一起的链指针。所以对十字链表的操作与对邻接表的操作类似。只是要注意对新增链的利用(带来了方便性)和处理(带来了复杂性)。 十字链表实质上是邻接表与逆邻接表的结合,它同时具备这两种表的方便性,对任一结点,既可容易找出以它为始点的各边(点),也可方便找出以它为终点的各边(点)。 由于十字链表中每个链表结点(图中的边对应的结点)有两个链域,所以它的存贮效率要比邻接表低。 如果将图的邻接矩阵用矩阵的十字链表表示,则可发现,图的十字链表是图的邻接矩阵的十字链表的变形。二者的主要差别是: ①前者的链表结点不需按起点与终点(相当于行号与列号)的大小排列; ②前者的“行”与“列”链表一般不需构成循环结构。 * * 图的存储结构 掌握图的存储结构以及在各种存储结构下的图的表示方法以及各种表示方法下的实现算法 ,重点掌握邻接矩阵法、邻接表的图的表示方法 19.0 图的存贮结构 19.1 邻接矩阵法 19.2 邻接表 19.3 十字链表(有向图)* 19.4 邻接多重表(无向图)* 19.1 图的存贮结构 因为在图中,任意一元素都可能有多个前趋与多个后继,所以无法通过元素的存贮次序反映元素间的关系,而必须显式地存贮结点之间的关系(即边)的信息。一般有两大类方法: n? 用边的集合表示图; n? 用链接关系表示图。 邻接矩阵法就属于第一类,而邻接表、十字链表及邻接多重表等属于第二类。 19.1.1 邻接矩阵法 (一) 存贮方法 邻接矩阵(Adjacency Matrix)这是一种用边的集合表示图的方法。其中边集合用一个二维数组表示,数组每个元素表示一条边,它的两个下标分别表示边的两个端点的编号。结点编号要用连续的自然数,使得能与数组下标对应。 具体地讲,若用二维数组A表示图,则A[i][j]表示边i,j或(i,j)。边一般要用记录表示,以描述与边相关的各种信息。前面我们给出了边的抽象定义TGraphEdge0,对邻接矩阵,TGraphEdge0包含一般需求下的内容,故邻接矩阵的边的定义可以是TGraphEdge0的直接派生(未增加新成员): 1 2 5 4 3 A(1,1)=0 A(1,2)=1 A(1,3)=0 A(1,4)=0 A(1,5)=1 A(2,1)=1

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档