一些话
图的邻接存储的建立,也就是前面的一大堆东西,什么什么#define 以及 typedef这样的一些代码
但是这样还是需要一些前置的知识的,那就来处理处理
邻接矩阵是图的一种链式的存储方式,是由两种部分组成,表头结点表(就是那个前面的东西) + 边表(可不就是后面连着的一条串串的东西)
邻接表 存储图
图的邻接表存储的表示
注意这里是有非常多的结构体的建立,一看就是比较烦人的,但是我们来细细的品味一下,注意!!!
这里仅仅只是邻接表的前置的东西,切记不可以混淆!!!
这里有顶点的结构体,也有边表的结构体,以及还有图的结构体定义
1.
typedef char VT; //vertex_typedef
typedef int ET; //edges_typedef
2.
//边表结构体 邻接Adjacency 顶点vertex
struct EdgeNode{
int adjacency_vertex; //邻接顶点的下标位置,也可以理解为该边所指向顶点的位置
ET weight; //边的权值 如果是图,不是网,就可以忽略的
struct EdgeNode *next; //这里就是动态存储的方式,有一种感觉像是进行迭代的感觉
//struct EdgeNode整个这个东西变成了类型的意思,这个在前半年的学过程中遇到过
//这里注释为:下个边表的结构体,但是这样看更好一点,理解为指向下一条的指针!!!
};
3.顶点结构体 (顶点的结点结构)
struct VertexNode{
VT data; //顶点元素,也就是顶点的信息
struct EdgeNode *firstedge;
};
4.边的数据结构---使用下标定位
struct Edge{
int ivex; //顶点 下标
int jvex; //顶点 下标
ET weight; //边的权值
};
5.边的数据结构---使用数字 元素定位方法
因为只会告诉你这个下标的值,因为你笨来就是不知道在那里的
struct Path{
VT bvex; //顶点的元素
VT evex; //顶点的元素
ET weight; //边的权值
};
6.图的数据结构
struct AdjGraph{
int edgenum; //边的数量
int vexnum; //顶点的数量
bool is_there_direction; //判断是否是有向图
struct VertexNode vertexs[]; //顶点集合,使用了动态存储的方式,如下
//顶点结构体 (顶点的结点结构)struct VertexNode{
//定义一个vertexs数组,是vertex的复数形式
};
typedef struct AdjGraph *AG; //看不惯你的操作,我直接重新起名字,也变成了类型的一个代号