图邻接表表示法.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图邻接表表示法

图的邻接表表示法 图的邻接表表示法类似于树的孩子链表表示法。对于图G中的每个顶点vi,该方法把所有邻接于vi的顶点vj链成一个带头结点的单链表,这个单链表就称为顶点vi的邻接表(Adjacency List)。 1. 邻接表的结点结构 (1)表结点结构 adjvex? next 邻接表中每个表结点均有两个域: ① 邻接点域adjvex 存放与vi相邻接的顶点vj的序号j。 ② 链域next 将邻接表的所有表结点链在一起。 注意:若要表示边上的信息(如权值),则在表结点中还应增加一个数据域。 (2)头结点结构 vertex firstedge 顶点vi邻接表的头结点包含两个域: ① 顶点域vertex 存放顶点vi的信息 ② 指针域firstedge vi的邻接表的头指针。 注意: ① 为了便于随机访问任一顶点的邻接表,将所有头结点顺序存储在一个向量中就构成了图的邻接表表示。 ② 有时希望增加对图的顶点数及边数等属性的描述,可将邻接表和这些属性放在一起来描述图的存储结构。 2.无向图的邻接表 对于无向图,vi的邻接表中每个表结点都对应于与vi相关联的一条边。因此,将邻接表的表头向量称为顶点表。将无向图的邻接表称为边表。 【例】对于无向图G5,其邻接表表示如下面所示,其中顶点v0的边表上三个表结点中的顶点序号分别为1、2和3,它们分别表示关联于v0的三条边(v0,v1),(v0,v2)和(v0,v3)。 ?注意: n个顶点e条边的无向图的邻接表表示中有n个顶点表结点和2e个边表结点。 3.有向图的邻接表 对于有向图,vi的邻接表中每个表结点都对应于以vi为始点射出的一条边。因此,将有向图的邻接表称为出边表。 【例】有向图G6的邻接表表示如下面(a)图所示,其中顶点v1的邻接表上两个表结点中的顶点序号分别为0和4,它们分别表示从v1射出的两条边(简称为v1的出边):v1,v0和v1,v4。 注意:n个顶点e条边的有向图,它的邻接表表示中有n个顶点表结点和e个边表结点。 4.有向图的逆邻接表 在有向图中,为图中每个顶点vi建立一个入边表的方法称逆邻接表表示法。 入边表中的每个表结点均对应一条以vi为终点(即射入vi)的边。 【例】G6的逆邻表如上面(b)图所示,其中v0的人边表上两个表结点1和3分别表示射人v0的两条边(简称为v0的入边):v1,v0和v3,v0。 注意: n个顶点e条边的有向图,它的邻接表表示中有n个顶点表结点和e个边表结点。 5.邻接表的形式说明及其建表算法 (1)邻接表的形式说明 var head,next,point:array[0..2001]of longint; /*邻接表的表首顶点为head,后继指针为next,顶点序列为point */ p:longint; proc addedge(a,b:longint); /*(a,b)进入邻接表*/ var t:longint; { inc(p);point[p]←b; /*增加顶点b*/ if head[a]=0 /*(a,b)进入邻接表*/ then head[a]←p else{ t←head[a]; while next[t]0 do t←next[t]; next[t]←p };/*else*/ };/* addedge } */   (2)邻接表的形式说明   const n=10; e=20; {n为顶点数,e为边数} type edge=^edgenode; edgenode=record {边节点信息} adjvex:1..n; {边的终点(链接点)} weight:integer;{该边上的权,无权图可以省去} next:edge; {指向下一条边的链接} end; vex=record vertex:integer; firstedge:edge; end; var s:edge; g=array [1..n] of vex; begin read(n,e); {n为顶点数,e为边数} for i:=1 to n do begin read(g[i]. vertex); {读入顶点信息表} g[i]. firstedge:=nil; {表

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

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

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档