数据结构邻接矩阵和邻接表图的基本操作的实现代码

时间: 2024-05-13 18:19:46 浏览: 7
邻接矩阵的基本操作实现代码: ```c++ #define MAX_VERTICES 100 // 图中最大顶点数 typedef struct { int no; // 顶点信息 } VertexType; typedef struct { int edges[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵 int n; // 顶点数 int e; // 边数 VertexType vexs[MAX_VERTICES]; // 顶点信息 } MGraph; // 初始化图 void InitGraph(MGraph &G, int n) { G.n = n; G.e = 0; for (int i = 0; i < G.n; ++i) { for (int j = 0; j < G.n; ++j) { G.edges[i][j] = 0; } } } // 添加边 void AddEdge(MGraph &G, int u, int v) { G.edges[u][v] = 1; G.edges[v][u] = 1; G.e++; } // 删除边 void DeleteEdge(MGraph &G, int u, int v) { G.edges[u][v] = 0; G.edges[v][u] = 0; G.e--; } // 判断是否有边 bool HasEdge(MGraph &G, int u, int v) { return G.edges[u][v] == 1; } ``` 邻接表的基本操作实现代码: ```c++ #define MAX_VERTICES 100 // 图中最大顶点数 typedef struct EdgeNode { int adjvex; // 邻接点下标 struct EdgeNode *next; // 指向下一个邻接点的指针 } EdgeNode; typedef struct { int no; // 顶点信息 EdgeNode *firstedge; // 指向第一个邻接点的指针 } VertexNode; typedef struct { VertexNode adjlist[MAX_VERTICES]; // 邻接表 int n; // 顶点数 int e; // 边数 } Graph; // 初始化图 void InitGraph(Graph &G, int n) { G.n = n; G.e = 0; for (int i = 0; i < G.n; ++i) { G.adjlist[i].no = i; G.adjlist[i].firstedge = NULL; } } // 添加边 void AddEdge(Graph &G, int u, int v) { EdgeNode *p = new EdgeNode; p->adjvex = v; p->next = G.adjlist[u].firstedge; G.adjlist[u].firstedge = p; EdgeNode *q = new EdgeNode; q->adjvex = u; q->next = G.adjlist[v].firstedge; G.adjlist[v].firstedge = q; G.e++; } // 删除边 void DeleteEdge(Graph &G, int u, int v) { EdgeNode *p = G.adjlist[u].firstedge; EdgeNode *pre = NULL; while (p != NULL && p->adjvex != v) { pre = p; p = p->next; } if (p != NULL) { if (pre == NULL) { G.adjlist[u].firstedge = p->next; } else { pre->next = p->next; } delete p; } EdgeNode *q = G.adjlist[v].firstedge; EdgeNode *pre_q = NULL; while (q != NULL && q->adjvex != u) { pre_q = q; q = q->next; } if (q != NULL) { if (pre_q == NULL) { G.adjlist[v].firstedge = q->next; } else { pre_q->next = q->next; } delete q; } G.e--; } // 判断是否有边 bool HasEdge(Graph &G, int u, int v) { EdgeNode *p = G.adjlist[u].firstedge; while (p != NULL) { if (p->adjvex == v) { return true; } p = p->next; } return false; } ```

相关推荐

最新推荐

recommend-type

广州大学 数据结构实验报告 实验三 图的操作与实现

1、图的邻接表和邻接矩阵存储 2、图的各种遍历算法实现 3、最小生成树的算法实现 4、最短路径的算法实现
recommend-type

邻接表或者邻接矩阵为存储结构实现连通无向图的深度优先和广度优先遍历

基本要求:以邻接表或者邻接矩阵为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。测试数据:教科书p168图7.13(a)。
recommend-type

北邮 数据结构第三次实验 图 实验报告

北邮信通院C++数据结构第三次实验——图 1.实验要求 2.程序分析 3.程序运行结果 4.总结 5.代码
recommend-type

假设图中数据元素类型是字符型,请采用邻接矩阵或邻接表实现图的以下基本操作: (1)构造图(包括有向图、有向网、无向图、无向网); (2)根据深度优先遍历图。

1、图和网的区别:网是带权值的图 有向和无向的区别:有向直接标出谁指向谁,无向是有向的特例,,v2&gt;有弧,说明,v1&gt;也有弧。 构图: ① 确定顶点数,弧数,是否有权值 ② 输入每个顶点,弧&lt;弧尾,弧头&gt;,权值 ③ ...
recommend-type

邻接表的建立 图 算法 数据结构

#include #include"iostream" ... //邻接点域 struct node *next; //链域 }EdgeNode; typedef struct vnode{ //顶点表结点 char vertex; //顶点域 EdgeNode *firstedge; //边表头指针 }VertexNode;
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。