图的链接表表示方法,C代码实现:
#include <stdio.h>
#include <stdlib.h>
#define VNUMBER 20
typedef struct edges{
int val;
int index; //边信息,index对应数组v[VNUMBER]的下标,表示这条边的其实节点
struct edges *next;
}edge;
typedef struct vertexs{ //顶点信息
int val;
struct edges *next;
}vertex;
typedef struct maps{
vertex v[VNUMBER];
}map;
map * mapcreate()
{
map *p = (map *)malloc(sizeof(map));
if(p == NULL)
{
exit(1);
}
int i;
for(i=0; i<VNUMBER; i++)
{
(p->v)[i].val = i;
(p->v)[i].next = NULL;
}
return p;
}
edge *addedg(map *m, edge *v)
{
v->next = (m->v)[v->index].next;
(m->v)[v->index].next = v;
return v;
}
void printmap(map *m)
{
edge *p = NULL;
int i;
for(i=0; i<VNUMBER; i++)
{
printf("vertex %d: ", (m->v)[i].val);
p = (m->v)[i].next;
while(p != NULL)
{
printf("%d->", p->val);
p = p->next;
}
printf("\n");
}
}
void main()
{
map *m = mapcreate();
edge e1 = {2, 1, NULL};
edge e2 = {3, 1, NULL};
edge e3 = {1, 2, NULL};
addedg(m, &e1);
addedg(m, &e2);
addedg(m, &e3);
printmap(m);
}