http://www.cnblogs.com/NoSoul/archive/2012/04/02/2429958.html

边结构体:

typedef struct
{
int to;
int next;
} Edge;

还需一个整型以及一个数组辅助变量。完整结构为:

#define  MaxV 100
#define MaxE 10000

typedef struct
{
int to;/*当前边的终端点*/
int next;/*也是以当前边的初始点为初始点的、与当前边相邻的另一条边在E[]中的index*/
} Edge;
Edge E[MaxE];
int Adj[MaxV];/*每个顶点的最后一条边*/
int Size;/*边的条数*/

Adj取英文中的Adjacent前3个字母,意为相邻。这儿存储的是每个顶点的最后一条边。
图的初始化函数为:

void Init(int N)/*N为当前图的顶点数*/
{
int i;
for(i=0; i<=N; ++i)
{
Adj[i]=-1;
}
Size=0;
return;
}

添加边的函数为:

void Add_Edge(int u,int v)/*添加一条有向边u-->v*/
{
E[Size].to=v;
E[Size].next=Adj[u];
Adj[u]=Size++;
return;
}

遍历以某顶点u为初始点的所有边:

void Show(int u)
{
int i;
for(i=Adj[u]; ~i; i=E[i].next)
{
printf("%d-->%d\n",u,E[i].to);
}
return;
}

如果每条边还需有其他的元素的话,Edge的结构体中还需加入对应元素。

该结构体与邻接矩阵相比的话。在稀疏图上完胜,在稠密图上,则还是建议使用邻接矩阵。