数据结构07章_图讲解.ppt

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

2. 邻接表(Adjacency List) ——链式存储 邻接表是图的一种链式存储结构。它是将图中的每一个顶点建立一个带表头结点的单链表,第i个单链表中的结点表示依附于顶点vi的边(有向图中是以vi为尾的弧)以及与vi相邻接的所有顶点;每个表头结点有序地存储在一个一维数组中,主要用于存储顶点的有关信息及指向该顶点对应的单链表的指针。 1) 邻接表中链表结点结构: 邻接点域:与顶点vi邻接的点在图中的位置(序号) 链域 :指示下一条边或弧的邻接点 adjvex nextarc info 数据域:边或弧相关的信息或权值等 data firstarc 数据域:与vi有关的信息(序号) 链域:指示链表中第一结点 b) 头结点: 注:顶点在图中位置是人为的编排的,顶点在图中并没有顺序关系。 a) 表结点: 2) 邻接表的存储结构如下: P163 //------图的邻接表存储表示------ typedef struct VNode { } Vnode, AdjList[MAX_VERTEX_NUM]; #define MAX_VERTEX_NUM 20 // 最大值顶点数 // 指向第一条依附该顶点的弧的指针 typedef struct { } ALgraph; int vexnum, arcnum; // 图的当前顶点数和弧数 AdjList vertices; int kind; // 图的种类标志 ArcNode *firstarc; int adjvex; typedef struct ArcNode { } ArcNode; InfoType *info; // 该弧相关信息的指针 // 该弧所指向的顶点的位置 // 指向下一条弧的指针 struct ArcNode *nextarc; vertexType data; // 顶点信息 3) 结点结构:为简便起见,我们采用两个域的结点结构来建立邻接表: 注意:为使表头结点和表结点同构,我们均采用同一种结点结构来建立邻接表,省略表结点中的info域。 例: v1 v2 v3 v4 无向图邻接表: v1 0 1 2 3 v2 0 1 2 3 v3 0 1 v4 2 3 0 1 2 3 ? ? ? ? 表头数组 有向图邻接表: v2 v3 v1 2 v1 ? ? v2 v3 0 1 1 2 0 ? 表头数组 注:① 无向图中n个顶点,e条边,则其邻接表需n个头结点和2e个表结点。 ② 表结点中,adjvex域存放顶点在数组中的序号。习惯上由大到小排列。 由邻接表可得:在无向图的邻接表中的第i个链表中的结点数等于顶点vi的度。 而对于有向图,第i个链表中的结点数是顶点的vi的出度。若要求顶点vi的入度,则要遍历整个邻接表,求得邻接表中表结点的邻接点域adjvex的值=i-1(顶点vi在数组中的序号)的结点的个数,即得顶点vi的入度。显然比较麻烦。为方便起见,我们可以建立另一个邻接表——逆邻接表,即:对每个顶点vi建立一个以vi为弧头的邻接表,其表结点是连接vi的尾顶点,其头结点与上相同。 例:上图的逆邻接表: 注:① 第i个链表中的结点数即为vi的入度;② 邻接表容易找出顶点之间的邻接点,但要判断vi和vj之间是否存在边(或弧),则要搜索第i或第j个链表,不及邻接矩阵方便。 2 v1 ? ? v2 v3 0 1 1 0 1 ? 表头数组 3. 十字链表(Orthogonal List)(略讲) 是有向图的另一种链式存储结构,可以看成是将有向图的邻接表和逆邻接表结合起来所得的一种链表。 1) 结点结构:每条弧有一个结点,每个顶点也有一个结点。 弧头顶点 指示弧头相同的下一条弧 弧相关的信息或权值等 a) 表(弧)结点: tailvex headvex hlink tlink info 弧尾顶点 指示弧尾相同的下一条弧 指向以该顶点为弧头的第一个弧结点 b) 头(顶点)结点: data firstin firstout 与顶点相关的信息 指向以该顶点为弧尾的第一个弧结点 2) 有向图的十字链表存储表示如下: P165 //------有向图的十字链表存储表示------ typedef struct vexNode { } vexnode; #define MAX_VERTEX_NUM 20 // 最大值顶点数 // 分别指向该顶点的第一条入

文档评论(0)

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

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

1亿VIP精品文档

相关文档