您的位置:首页 > 其它

图的邻接表存储

2015-06-11 11:00 260 查看
邻接表是图的一种链式存储结构。在邻接表中,对图中的每个定点建立一个单链表,第i个单链表中的结点表示依附于定点vi的边。每个结点由三个域构成,表节点,头结点,还有存储图的。

如果像构建下图的一个图的结构






那么程序如下:

#include<stdio.h>
#include<stdlib.h>
#define  MAXNUM 100
typedef struct node   //边表节点
{
int adjvex;
struct node* next;
}EdgeNode;

typedef struct     //顶点表节点
{
char vertex;
EdgeNode* firstedge;
}VertexNode;

typedef struct
{
VertexNode adjlist[MAXNUM];
int n,e;

}ALGraph;
void create(ALGraph* G)
{
int i,j,k,w,v;
EdgeNode *s;
printf("读入顶点数和边数");
scanf("%d,%d",&G->n,&G->e);

for (i=0;i<G->n;i++)
{
fflush(stdin);
printf("建立顶点表");
G->adjlist[i].vertex=getchar();
G->adjlist[i].firstedge=NULL;
}
printf("建立边表\n");
for (k=0;k<G->e;k++)
{
printf("读入(vi-vj)的顶点对序号");
scanf("%d,%d",&i,&j);
s=(EdgeNode*)malloc(sizeof(EdgeNode));
s->adjvex=j;
s->next=G->adjlist[i].firstedge;  //插入表头
G->adjlist[i].firstedge=s;
s=(EdgeNode*)malloc(sizeof(EdgeNode));
s->adjvex=i;
s->next=G->adjlist[j].firstedge;
G->adjlist[j].firstedge=s;

}
}
int main()
{
int i;
ALGraph* G= (ALGraph*)malloc(sizeof(ALGraph));
create(G);
for (i=0;i< G->n;i++)
{
printf("%d->",i);
while(G->adjlist[i].firstedge!=NULL)
{
printf("%d->",G->adjlist[i].firstedge->adjvex);
G->adjlist[i].firstedge=G->adjlist[i].firstedge->next;

}
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: