顶点结点:
//顶点的结点结构
typedef struct VNode
{
VertexType data; //顶点信息
ArcNode* firstarc; //指向第一条依附该顶点的边的指针
}VNode, AdjList[MVNum];
//例如:VNode v[MVNum] 相当于 AdjList v
我觉得也可以改成这样写(存疑):
//顶点的结点结构
struct VNode
{
VertexType data; //顶点信息
ArcNode* firstarc; //指向第一条依附该顶点的边的指针
};
typedef VNode AdjList[MVNum];
//例如:VNode v[MVNum] 相当于 AdjList v
主要的问题/歧义出在 AdjList 之上,虽然不知道我上面的写法对不对,但是可以肯定的是,对于 AdjList,我们可以这么理解:
为了方便理解 AdjList ,我们看:
VNode v[MVNum] 相当于 AdjList v
就像看:我们定义一个
int a [ 5 ] 等价于一个什么 Alist a;实际上:
AdjList 就表示:【数组类型为VNode类型的一维数组】的一个类型
但是如何在代码里实现它这样的一个效果是一个难题,Anyway,反正就是这么一回事
TMD而且我后面看了一下,也可以不去用这个 AdjList 的程序,只要把后面的图的程序改成:
//图的定义
struct ALGraph
{
//定义一个数组,保存图的顶点
VNode vexs[MAXSIZE];
//定义两个变量,保存当前图的顶点个数以及边的条数
int vexnum, arcnum;
};
就行,这玩意并不重要,我是真nm无语...
弧/边的结点:
//弧/边的结点结构
typedef int OtherInfo;
struct ArcNode
{
int adjvex; //该边所指向的(相邻)顶点的位置
struct ArcNode* nextarc; //指向下一条边的指针
OtherInfo info; //和边相关的信息
};
图的结构定义:
//图的结构定义
struct ALG
{
AdjList vertices; //顶点表
int vexnum, arcnum; //顶点数和边数
};
汇总->
前置条件:
#include<iostream>
using namespace std;
typedef int Status;
#define MVNum 100 //最大顶点数
//MAX Vertex Number
typedef char VertexType; //设顶点类型:字符型
//顶点的结点结构
typedef struct VNode
{
VertexType data; //顶点信息
ArcNode* firstarc; //指向第一条依附该顶点的边的指针
}VNode, AdjList[MVNum];
//例如:VNode v[MVNum] 相当于 AdjList v
//弧/边的结点结构
typedef int OtherInfo;
struct ArcNode
{
int adjvex; //该边所指向的(相邻)顶点的位置
struct ArcNode* nextarc; //指向下一条边的指针
OtherInfo info; //和边相关的信息
};
//图的结构定义
struct ALG
{
AdjList vertices; //顶点表
int vexnum, arcnum; //顶点数和边数
};