问题描述 :

目的:使用C++模板设计并逐步完善图的邻接表抽象数据类型(ADT)。

内容:(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接表ADT。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。)

(2)使用构造函数,构造一个有权图。

注意:DG(有向图), DN(有向网), UDG(无向图), UDN(无向网)

参考函数原型:

//构造函数构造一个有权图。6个参数的含义:图的类型、结点数、边数、结点集、边集、权集

template<class TypeOfVer, class TypeOfEdge>

adjlist_graph<TypeOfVer, TypeOfEdge>::adjlist_graph( const string &kd, int vSize, int eSize, const TypeOfVer d[], int **e, const TypeOfEdge w[]);

输入说明 :

第一行:图的类型

第二行:结点数

第三行:结点集

第四行:边数

第五行:边集

第六行:权集

输出说明 :

第一行:图的类型

第二行:顶点集

第三行:邻接矩阵

输入范例 :

UDN
6
A B C D E F
6
0 1
0 2
1 3
2 3
3 4
3 5
20 30 40 50 70 80

输出范例 :

UDN
A B C D E F
A->2(30)->1(20)
B->3(40)->0(20)
C->3(50)->0(30)
D->5(80)->4(70)->2(50)->1(40)
E->3(70)
F->3(80)

实现源码

/*描述:构造有权图
*/
adjlist_graph( const string &kd, int vSize,int eSize, const TypeOfVer d[], int **e, const TypeOfEdge w[]) {//判定是否为有权图if(GraphKind == "DG" || GraphKind == "UDG")return;//初始图中的各个基本的属性GraphKind = kd;Vers = vSize;Edges = eSize;//遍历对结点列表进行赋值verList = new verNode[vSize];for(int i = 0;i < vSize;i ++){verList[i].setHead(NULL);verList[i].setVer(d[i]);}//构造边表//temp保存新生成的结点edgeNode<TypeOfEdge> *tempLeft = NULL,*tempRight = NULL;if(GraphKind == "UDN") {//找到边对应的顶点for(int i = 0; i < eSize; i ++) {//分别针对左右节点进行生成结点tempLeft = new edgeNode(e[i][1],w[i]);tempRight = new edgeNode(e[i][0],w[i]);//获取头结点tempLeft->next = verList[e[i][0]].getHead();verList[e[i][0]].setHead(tempLeft);tempRight->next = verList[e[i][1]].getHead();verList[e[i][1]].setHead(tempRight);}} else {for(int i = 0; i < eSize; i ++) {//分别针对左右节点进行生成结点tempLeft = new edgeNode(e[i][1],w[i]);//获取头结点tempLeft->next = verList[e[i][0]].getHead();verList[e[i][0]].setHead(tempLeft);}}}

事故现场

两次提交

  • 第一次忘记输出图的类型

分析总结

  • 写完邻接矩阵的图之后,发现邻接表就不是那么难了,所以加油喽,快点结束,开始下一个篇章
如有不妥,请留言或者加本人的扣扣,651378276,一定知无不言

邻接表:构造有权图(使用头插法)相关推荐

  1. 邻接表:有权图获取边的权值

    问题描述 : 目的:使用C++模板设计并逐步完善图的邻接表抽象数据类型(ADT). 内容:(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接表ADT.(由于该环境目前仅支持单文件的编译,故将所 ...

  2. 邻接矩阵:构造有权图

    目的:使用C++模板设计并逐步完善图的邻接矩阵抽象数据类型(ADT). 内容:(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接矩阵ADT.(由于该环境目前仅支持单文件的编译,故将所有内容都集 ...

  3. 【算法】图(一)拓扑排序的实现 图的邻接表算法 判断是否图G中存在环

    文章目录 用list来表示图,判断是否存在环 邻接表实现拓扑排序 用DFS(邻接矩阵) 来实现拓扑排序. 判断无向图顶点是否全部连通 判断图G中从顶点u到v是否存在简单路径 输出图G中从顶点u到v的所 ...

  4. 用邻接表dfs和bfs图

    dfs bfs 树是一种特殊的图,与图的存储方式相同. 对于无向图中的边ab,存储两条有向边a->b, b->a. 因此我们可以只考虑有向图的存储. (1) 邻接矩阵:g[a][b] 存储 ...

  5. 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构|图的邻接表与深度、广度优先搜索

    线性存储元素时,元素的关系也同时确定了.而非线性数据结构就不同了,需要同时考虑存储数据元素和数据元素的关系. 由于图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位 ...

  6. 第十一周项目实践2 用邻接表存储的图来实现基本应用

    假设图G采用邻接表存储,分别设计实现以下要求的算法:  (1)输出出图G中每个顶点的出度:  (2)求出图G中出度最大的一个顶点,输出该顶点编号:  (3)计算图G中出度为0的顶点数:  (4)判断图 ...

  7. 数据结构之图(三)——邻接表

    邻接表表示法(链式) 顶点: 按编号顺序将顶点数据存储在一维数组中. 关联同一顶点的边: 用线性链表存储. 如果有边\弧的信息,还可以在表结点中增加一项, 无向图的邻接表 例子: 特点: 邻接表不唯一 ...

  8. 《数据结构》-图的邻接表表示法(四)

    邻接表表示法(链式) 存储定义: 顶点:按编号顺序将顶点数据存储在一维数组中 关联同一顶点的边(以顶点为尾的弧):用线性链表存储 无向图的邻接表 例如,如下无向图 则它的邻接表为 无向图邻接表的特点: ...

  9. 图的存储结构(邻接矩阵和邻接表)

    图的存储结构(邻接矩阵和邻接表) 前言: 前面我们学习图的有些定义和术语,对图这个数据结构有了新的见解和认知,让我们理解图结构的知识,今天我们学习图的存储结构,图的存储结构比较多,我们今天主要是学习邻 ...

最新文章

  1. bootstrap配置Nacos出现Param ‘serviceName‘ is illegal, serviceName is blank
  2. java之IO流(一)
  3. 努力做一名认真踏实的工程师
  4. 修改Maven本地仓库的位置 方法
  5. JSP的MVC模式(JavaBean、Servlet、JSP)
  6. 实习日志(1)2011-12-30
  7. MATLAB-画图汇总
  8. 独创圆柱形投影,索尼高透光HOE全息显示方案详解
  9. 用增广矩阵的秩判断N线性方程的解的个数
  10. HQChart实战教程17 -K线沙盘推演
  11. java 任意 符号_哪种符号表示表面可用任意方法获得?()
  12. PHP 文档标签添加 间隔符“多空格”处理
  13. rstudio中johansen协整检验代码
  14. Hash Exercise 21.11.27
  15. 宜信 、《麻省理工科技评论》共同揭晓: 35岁以前最有可能改变世界的中国科技精英丨Xtecher 前线
  16. lstm 变长序列_基于变长时间间隔LSTM方法的胎儿异常体重预测
  17. echarts图表实战
  18. 数据结构-树 速通指南
  19. 微量元素农业主导-国稻种芯-李喜贵:功能性农业两会档案
  20. 计算机界的传奇人物:高德纳

热门文章

  1. 【工具使用】IDEA 2019 导入gradle工程问题
  2. c14cpm和dpm怎么换算_核辐射物理及探测学
  3. 搜索引擎与爬虫结合的示例:书虫找书
  4. 网速测试利器-iperf3
  5. MBA-day10 逻辑学-直言
  6. Latex公式放符号正下方
  7. laravel macro 使用案列
  8. 文件操作——修改文件名
  9. 大厂面试官在校招面试中爱问啥?
  10. 计算机毕业设计 SpringBoot+Vue拍卖竞拍系统 拍卖管理系统 网上拍卖系统 网络拍卖系统