关闭

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

标签: 数据结构
93人阅读 评论(0) 收藏 举报
分类:

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

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

  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;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3003次
    • 积分:365
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:6篇
    • 译文:0篇
    • 评论:0条