刚刚学了前向星,现在再学一下链式前向星。
链式前向星
- 链式前向星是邻接表的静态建表储存图的方式。
- 采用 数组模拟链表 的方式实现邻接表。
基本思路
- 记录下一个节点在数组的哪一个位置
- head数组描述点 v i v_i vi 边信息的链的起点在 Edges 数组的位置
- 构造链式前向星就是将新加入的节点,链在对应链的最开始的,并修改head数组对应位置的值
代码实现
- 声明
int head[n]; struct node{ int to,w,next; }Edges[m];
- 信息读取及储存
cin>>i>>j>>w; Edges[k].to=j; Edges[k].w=w; Edges[k].next=head[i]; head[i]=k;
- 遍历
for(int i=1;i<=n;i++) { for(int k=head[i];k!=-1;k=Edges[k].next) cout<<i<<" "<<Edges[k].to<<" "<<Edges[k].w<<endl; }
复杂度
- 时间复杂度 O ( m ) O(m) O(m)
- 空间复杂度 O ( m + n ) O(m+n) O(m+n)
非常优秀,除了不能直接通过起点终点确定有没有边…