图常用的存储结构设计方式为 :邻接矩阵(二维数组),邻接表(链表)
其实两种的存储结构可以参考二叉树的存储结构设计方式,思想大同小异,所有的数据结构都是由链表构成的,只不过时思想的升华而已
这里代码给出了一种十字链表法,对于有向图的一种合理的实现方式,并且个人感觉没必要纠结与图的存储结构该去怎么实现,最主要的时贯通思想。
#include <stdio.h>
#include <stdlib.h>
#define Size 1033
//入度结点
typedef struct IDNode
{
int iDIndex; //入度结点位置
struct IDNode *nextID; //指向下一个入度结点
}IDNode, *InDegreeNode;
//出度结点
typedef struct ODNode
{
int oDIndex; //出度结点位置
struct ODNode *nextOD; //指向下一个出度结点位置
}ODNode, *OutDegreeNode;
//图的结点
typedef struct GNode
{
char *data; //数据域,这里假设存储字符串
InDegreeNode firstID; //指向第一个入度结点
OutDegreeNode firstOD; //指向第一个入度结点
}GNode, *GraphNode;
//图的存储结构,图数组
typedef struct Graph
{
GraphNode *graphs; //定义图数组
int size; //图的总大小
int count; //已有结点数
}Graph;