数据结构之图的存储结构——静态建表(链式前向星)

  邻接表的静态建表存储图的凡是也称链式前向星。链式前向星方法最开始是基于前向星,是以提高其构造效率为目的设计的存储方式,最终形成的数据却是一个变形的邻接表。

链式前星采用数组模拟链表的方式实现邻接表的功能,并且使用很少的额外空间,可以说是目前建图和遍历效率最高的存储方式。

  head数组存储描述点Vi边信息的链的起点在Edges数组的位置。构造链式前向星就是将新加入的节点链在对应链的最开始并修改head数组的对应位置的值。

这种方法的建图效率非常搞,读入结束,建图就结束,而且没有内存管理

#include<iostream.h>
#include<stdlib.h>
#include<string.h>
const int n=100;
const int m=10;
int head[n];   //存储描述点Vi边信息的链的起点在Edges数组的位置。
//数据结构
//***************************************
struct EdgeNode{
	int to;		//终点
	int w;		//权值
	int next;  //指向下一条边
};
EdgeNode Edges[m+1];
//***************************************
//信息存储
int main()
{
	int i,j,w;
	int k;
	memset(Edges,0,sizeof(Edges));  //从1开始存,故初始化为0 ,若要从0开始存,则应该初始化为-1;
//**************************************
//信息存储代码
	for(k=1;k<=10;k++)   //k表示当前输入的第k条边
	{
		cin>>i>>j>>w;
		Edges[k].to=j;
		Edges[k].w=w;
		Edges[k].next=head[i];   
		head[i]=k;
	}
//*************************************
//遍历代码
	for(i=1;i<=n;i++)     //对每个起点进行判断,如果next不为0则肯定有边
	{
		for(int t=head[i];t!=0;t=Edges[t].next)		//head[i]表示以第i个顶点为起点,  搜索,直到指向下一条边的next为0则寻找下一顶点
			cout<<i<<' '<<Edges[t].to<<' '<<Edges[t].w<<endl;
	}
//************************************
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值