数据结构,图的邻接表存储结构为什么要设三个结构体?

typedef struct VNode
{
	VerTexType data;         //顶点信息
	ArcNode *firstarc;       //指向第一条依附该顶点的边的指针
}VNode,AdjList[Num];

typedef struct ArcNode           //边结点
{
	int adjvex;                  //该边所指向的顶点的位置
	struct ArcNode *nextarc;     //指向下一条边的指针
	OtherInfo info;              //和边相关的信息(权值等)
}ArcNode;

typedef struct
{
	AdjList vertices;      //存放各个顶点的数组
	int vexnum, arcnum;    //图的当前顶点数和弧数
}ALGraph;

为什么要定义顶点,边,图三个结构体?

我知道图的邻接表是 所有 顶点串起来的链表 的数组,

所以顶点结构体是头结点,边结构体存储的是与顶点相连的边和点的信息,图结构体是将所有链表封装在一起。

我疑惑的是为什么要将顶点和边结构体区别开来?(可以将顶点和边的信息都放在数据域?)图结构体的边数也不是必要的吧?

感谢解答!

在邻接表中,边实际上就是顶点的一部分,你可以把它们都放到顶点的结构体中,也没问题。这个地方把它单独抽象出来是为了让整个数据结构更加清晰。