数据结构介绍——链式前向星

链式前向星是一种由Malash创造的数据结构,用于简化图的表示,相较于邻接表和邻接矩阵,它提供了一种更简洁且效率较高的解决方案。本文详细介绍了其结构及实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:链式前向星是ssfz神牛Malash创造的(至少Baidu上没有搜到)名词,或许这种数据结构有其他更加正规易懂的名字,但我还是没有搜到。(有一个资料称之为加上next数组前向星,但这个名字实在不好) 该数据结构可能是Jason911神牛或其他神牛发明的。

用途:用于解决图表示困难的问题,如果说邻接表是不好写但效率好,邻接矩阵是好写但效率低的话,前向星就是一个相对中庸的数据结构。前向星固然好些,但效率并不高。而在优化为链式前向星后,效率也得到了较大的提升。虽然说,世界上对链式前向星的使用并不是很广泛,但在不愿意写复杂的邻接表的情况下,链式前向星也是一个很优秀的数据结构。

模板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include<iostream>
#include<string.h>
#include<limits>
const int maxn = 10005;
const int maxm = 1000005;//edge
using namespace std;
int n;
struct node
{
    int to,next;
//    int value ,from,
};
node edge [maxm];
int box[maxn];//box[i]  节点i下第一条边
int ecnt;//边的个数
void _make_map(int from,int to)
{
    edge[ecnt].to=to;//to  节点
    edge[ecnt].next=box[from];//同节点下该边下一条边
    box[from]=ecnt++;// 节点from的第一条边
}
void make_map(int from,int to)//双向边
{
    _make_map(from,to);
    _make_map(to,from);
}
for(int i=box[u];i+1;i=edge[i].next);
//遍历父节点为u的所有边
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        ecnt=0;
        int i;int u[100],v[100];
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&u[i],&v[i]);
        }
        for(i=0;i<n;i++)
        make_map(u[i],v[i]);
//        for(int i=box[u];i+1;i=edge[i].next)
//        {
//            int v=edge[i].to;
//            if(p==v)continue;
//        }
    }
    return 0;
}
例题:
http://www.cppblog.com/menjitianya/archive/2015/11/19/212292.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化橙同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值