数据结构——图的存储 邻接表

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct node{     //定义结点结构  由数据域vertex和指针域next组成 
	int vertex;
	struct node *next; 
}NODE;

typedef struct hnode{   //定义头结点结构 由数据域head和 指针域first组成    !!!注意 !!! 指针域类型是node 而不是hnode!!! 
	int head;
	struct node *first;   
}HNODE;

typedef struct{       //定义邻接表的结构   由头结点数组  和头结点数n边数e组成  !!!注意 !!!头结点数组存放的是头结点 而不是头结点指针!! 
	HNODE list[10];   
	int n,e;
}GRAPH;
void create(GRAPH *G); 
int main(){
	int i,j;
	GRAPH *G=(GRAPH *)malloc(sizeof(GRAPH));  //定义一个邻接表的指针  不要忘记分配动态内存单元 
	create(G);        //传入邻接表指针  创建邻接表 
	for(i=0;i<G->n;i++)
	{
		printf("%d->",i);
		while(G->list[i].first!=NULL)
		{
			printf("%d->",G->list[i].first->vertex);
			G->list[i].first=G->list[i].first->next;
		}
		printf("\n");
	}
	return 0;
} 

void create(GRAPH *G){
	int p,q,i,j,m;
	NODE *s;
	printf("请输入定点数n和边数e:");  
	scanf("%d %d",&G->n,&G->e); 
	for(p=0;p<G->n;p++)
	{
		printf("请输入头节点:");   //初始化头结点 
		scanf("%d",&m);
		G->list[m].head=m;
		G->list[m].first=NULL;	
	}	
	for(q=0;q<G->e;q++)
	{
		printf("请输入边Vi Vj:");
		scanf("%d %d",&i,&j);
		s=(NODE *)malloc(sizeof(NODE));  
		s->vertex=j;
		s->next=G->list[i].first;
		G->list[i].first=s;
		
		s=(NODE *)malloc(sizeof(NODE));
		s->vertex=i;
		s->next=G->list[j].first;
		G->list[j].first=s;
	}
}


运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值