数据结构:第7章 图.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文档。上传文档
查看更多
6.2 图的存储结构 邻接表形式描述 typedef struct{ AdjList vertices; //邻接表 int vexnum, arcnum; //图的当前顶点数和边数 }ALGraph; 若无向图中有n个顶点、e条边,则它的邻接表需要 n个头结点,2e个表结点 若为有向图,则需 n 个头结点,e个表结点 6.2 图的存储结构 v1 v2 v3 v5 v4 e1 e2 e3 e4 e5 e6 0 1 2 3 4 v1 v2 v3 v4 v5 3 e2 1 e1 ∧ 4 e4 2 e3 0 e1 ∧ 4 e6 3 e5 1 e3 ∧ 2 e5 0 e2 ∧ 2 e6 1 e4 ∧ 无向图中, 顶点Vi的度 = 以vi为头结点的链表结点数 判断Vi,Vj之间是否邻接:遍历Vi或Vj的链表 6.2 图的存储结构 有向图: 顶点Vi的出度 = 以vi为头结点的链表结点数 顶点Vi的入度 = 全部顶点的链表中Vi结点出现次数 判断顶点Vi是否邻接到Vj:遍历Vi的链表 判断顶点Vi是否邻接自Vj:遍历Vj的链表 v1 v2 v4 v3 e1 e2 e3 e4 0 1 2 3 v1 v2 v3 v4 2 e2 1 e1 ∧ ∧ 3 e3 ∧ 0 e4 ∧ 6.2 图的存储结构 逆邻接表 为了方便计算顶点Vi的入度(以Vi为头的弧), 对每个顶点Vi建立一个链接以Vi为头的弧的表 v1 v2 v4 v3 e1 e2 e3 e4 0 1 2 3 v1 v2 v3 v4 3 e4 2 e3 ∧ 0 e1 ∧ ∧ 0 e2 ∧ 6.2 图的存储结构 十字链表 有向图的另一种链式存储 为了解决邻接表有向图求入度困难的问题 将邻接表和逆邻接表合而为一,从而得到十字链表 6.2 图的存储结构 v1 v2 v4 v3 e1 e2 e4 e5 e3 e6 e7 0 1 2 3 v1 v2 v3 v4 0 1 e1 0 2 e2 ∧ 2 0 e3 ∧ 3 0 e5 3 1 e6 3 2 e7 ∧ ∧ ∧ ∧ 2 3 e4 ∧ ∧ tailvex headvex info hlink tlink data firstin firstout 弧结点 顶点结点 6.2 图的存储结构 十字链表存储形式描述 #define MAX_VERTEX_NUM 20 typedef struct ArcBox // 定义弧结点 { int tailvex, headvex; //该弧的尾和头顶点的位置 struct ArcBox *hlink,*tlink; //分别为弧头相同和弧尾相同的弧的链域 InfoType *info; // 该弧相关信息的指针(可无) }ArcBox; tailvex headvex info hlink tlink 弧结点 6.2 图的存储结构 typedef struct // 定义顶点结点 { VertexType data; ArcBox *firstin,*firstout; //分别指向该顶点第一条入弧和出弧 }VexNode; data firstin firstout 顶点结点 6.2 图的存储结构 typedef struct { VexNode xlist[MAX_VERTEX_NUM]; // 表头向量(数组) int vexnum,arcnum; // 有向图的当前顶点数和弧数 }OLGraph; 6.2 图的存储结构 十字链表表示有向图的构造算法 输入顶点值,构造表头向量(头结点数组) for (i=0; iG.vexnum; i++) {scanf(G.xlist[i].data; ……)} 输入弧的信息 按照 弧尾、弧头的顺序输入弧的两个顶点的值 scanf(V1, V2); 找到弧尾和弧头在头结点数组中的序号 i=Locate(G,V1); j=Locate(G,V2); 构造弧结点p,填入tailvex=i; headvex=j; 将该弧结点插入以V1为头结点的邻接表 tlink=G.xlist[i]

您可能关注的文档

文档评论(0)

学习让人进步 + 关注
实名认证
文档贡献者

活到老,学到老!知识无价!

1亿VIP精品文档

相关文档