邻接表的静态建表存储图的凡是也称链式前向星。链式前向星方法最开始是基于前向星,是以提高其构造效率为目的设计的存储方式,最终形成的数据却是一个变形的邻接表。
链式前星采用数组模拟链表的方式实现邻接表的功能,并且使用很少的额外空间,可以说是目前建图和遍历效率最高的存储方式。
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;
}