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

来源:互联网 发布:电力概预算软件 编辑:程序博客网 时间:2024/04/28 03:06

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

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

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


原创粉丝点击