1. 将邻接表转换成邻接矩阵

main.cpp

void Convert(ALGraph G,MGraph &M){M.vexnum = G.vexnum;M.arcnum = G.arcnum;for(int i=1;i<=G.vexnum;i++)for(int j=1;j<=G.vexnum;j++)M.Edge[i][j] = 0;for(int i=1;i<=G.vexnum;i++){ArcNode *p = G.vertices[i].first->next;M.Vex[i] = G.vertices[i].data;while(p){M.Edge[i][p->adjvex] = 1;p = p->next;}}
}
// 图的邻接表转换成邻接矩阵

运行结果:

所表示的图为:

实现邻接表的参考代码在这篇博客:数据结构(C语言版)严蔚敏(线性表、队列、栈、串、树、图等数据结构参考代码,持续更新中。。。)

2. 将邻接矩阵转换成邻接表

main.cpp

void Convert2(MGraph M,ALGraph &G){G.arcnum = M.arcnum;G.vexnum = M.vexnum;for(int i=1;i<=M.vexnum;i++){G.vertices[i].data = M.Vex[i];G.vertices[i].first = (ArcNode*)malloc(sizeof(ArcNode));ArcNode *p = G.vertices[i].first,*q;p->next = NULL;for(int j=1;j<=M.vexnum;j++){if(M.Edge[i][j]!=0){q = (ArcNode*)malloc(sizeof(ArcNode));q->adjvex = j;q->next = p->next;p->next = q;}}}
}
// 图的邻接矩阵转换成邻接表

运行结果:

所表示的图和1一样。

3. 求图的拓扑排序序列

int indegree[MaxVertexNum];
void  getIndegree(ALGraph G){for(int i=1;i<=G.vexnum;i++)indegree[i] = 0;for(int i=1;i<=G.vexnum;i++){ArcNode *p = G.vertices[i].first->next;while(p){indegree[p->adjvex]++;p = p->next;}}
}
// 邻接表求图的各顶点的入度
bool TopologicalSort(ALGraph G){int Gs[MaxVertexNum];// 用栈,这里用数组代替int i=0;for(int v=1;v<=G.vexnum;v++)if(indegree[v] == 0)Gs[i++] = v;// 将入度为0的顶点入栈int count_1 = 0;// 计数,记录当前已经输出的顶点数while(i>0){int v1 = Gs[--i];printf("%d",v1);count_1++;for(ArcNode *p = G.vertices[v1].first->next;p;p=p->next){if((--indegree[p->adjvex])==0)Gs[i++] = p->adjvex;}}if(count_1<G.vexnum) // 有向图中有回路return false;elsereturn true;
}
// 求拓扑排序序列

运行结果:

表示的有向图为:

有向无环图(DAG)
拓扑排序:

  1. 从AOV网中选择一个没有前驱的顶点并输出;
  2. 从网中删除该顶点和所有以它为起点的有向边;
  3. 重复1,2直到当前的AOV网为空或者当前网中不存在无前驱的顶点为止。

数据结构(C语言版)严蔚敏---图的操作的相关代码相关推荐

  1. c语言实现bf算法的定位函数,数据结构c语言版严蔚敏清华大学出版社第四章串.ppt...

    数据结构c语言版严蔚敏清华大学出版社第四章串 模式匹配(定位) 设有主串S和子串T(将S称为目标串,将T称为模式串),在主串S中,从位置start开始查找,如若在主串S中找到一个与子串T相等的子串,则 ...

  2. 数据结构(C语言版)严蔚敏(字符串的模式匹配算法--KMP算法)

    数据结构(C语言版)严蔚敏(字符串的模式匹配算法–KMP算法) 1.暴力匹配算法 // 暴力匹配算法 int Index2(SString S,SString T) {// S是主串,T是子串int ...

  3. 数据结构(C语言版)严蔚敏(树、二叉树的相关概念笔记)

    数据结构(C语言版)严蔚敏(树的相关概念笔记) 1. 树中一个节点的孩子个数称为该节点的度,树中节点的最大度数称为树的度: 2. 度大于0的节点称为[分支节点](非终端节点),度为0的节点称为[叶子节 ...

  4. 数据结构c语言版严蔚敏 顺序表

    说来惭愧由于贪玩,数据结构挂科了,现在重新学一遍数据结构,用博客督促一下自己,希望各位同学引以为戒,贪玩一时爽,痛苦永留存. 本文主要以严老师的数据结构书为主. 结构类型 listsize代表这个顺序 ...

  5. 数据结构(C语言版)严蔚敏->排序

    排序 1. 插入排序 1.1 直接插入排序 1.2 折半插入排序 1.3 希尔排序(Shell Sort) 2.交换排序 2.1 冒泡排序 2.2 快速排序 3. 选择排序 3.1 简单选择排序 3. ...

  6. 数据结构(C语言版 严蔚敏著)——树

    · 树(tree)是n(n>=0)个结点的有限集.当n=0时成为空树,在任意一颗非空树中: //这里只需掌握定义,重点在二叉树 -有且仅有一个特定的称为根(Root)的结点: -当n>1时 ...

  7. 数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序、中序、后序、层次)和线索二叉树

    二叉树每个节点至多只有两棵子树(即二叉树中不存在度大于2的节点),并且二叉树的子树有左右之分,其次序不能任意颠倒. 1. 二叉树 二叉树一般采用链式存储结构,用链表节点来存储二叉树中每个节点.在二叉树 ...

  8. 数据结构(C语言版 严蔚敏 编著)课后习题答案

    转自 https://blog.csdn.net/Bamboo_shui/article/details/72433523    (原文没第八章答案) 数据结构(C语言版 第2版)课后习题答案 严蔚敏 ...

  9. 《数据结构》C语言版 严蔚敏版本 学习笔记

    笔者的话: 严蔚敏版本的这本<数据结构>脉络清晰,第二到第六的章节围绕绪论展开,而书本封面处也有本书结构框图,希望读者在学习的同时能够对照结构框图,搭建知识框架. 第一章 绪论 早期计算机 ...

最新文章

  1. 无贡献、无创新、无思路,ML领域准博士求助:论文到底要怎么创新?
  2. 要看懂MATLAB的Help需要积累的英文词汇!
  3. 【PHP】xampp配置多个监听端口和不同的网站目录(转)
  4. 重构-改善既有代码的设计(1)
  5. 完美解决Mac电脑睡眠之后苹果电脑没有声音的方法
  6. hdu 3065 病毒侵袭持续中
  7. java 坦克大战 教程_马士兵老师/坦克大战/java基础/网络编程 (9.1G)视频教程下载...
  8. android 常用机型尺寸_目前主流的智能手机的屏幕尺寸与分辨率是多少?
  9. 源码:winamp播放器 C++
  10. no jdk specified
  11. python平安夜代码加文案
  12. A blockchain‑based smart home gateway architecture for preventing data forgery
  13. 教你一招快速清理DNS缓存
  14. android 函数式编程,思想交融,Android中的函数式编程(2):什么是函数式编程...
  15. linux内核测试指南 第一章
  16. 24点问题(增加数据)·回溯
  17. 网址中为什么会有好多%BE%B2%D0%之类的--URLEncode
  18. c语言cfile用法,MFC CFile类读写文件详解
  19. DDP及其在pytorch中应用
  20. symfonos: 1

热门文章

  1. 【Ziv Bar-Joseph教授课件】计算生物学:序列比对与剖面HMMs
  2. 嵌入式单片机智能手表实验之优秀
  3. matlab大津法函数,matlab 大津阈值分割【相关词_ 大津法阈值分割matlab】
  4. autojs锁屏(autojs一键锁屏)
  5. 六大设计模式原则-单一职责原则
  6. 配置阿里云code的ssh
  7. ⼤数据是如何产生的?大数据的特点是什么?什么是埋点?如何进行数据埋点?【超详细介绍】
  8. 初学python100例-案例35 数字反转 少儿编程python编程实例讲解
  9. 信息技术必修丨网络域名
  10. 快速用golang开发一个上传excel入库到sqlserver的应用