怎么用数组链表 表示 邻接表
- ***邻接表(数组链表)是怎么存储的?
***邻接表(数组链表)是怎么存储的?
正常情况下,我们用链表存储的话,我们让 1 指向 2
我们会给出 1 和 2的地址,然后让 1 的next 指向 2的地址
但是呢,我们用数组存储 1 指向 2 的话,不容易找到2的idx,所以我们就直接再创建一个 idx 值为2
也就是 3 和 1 指向的 2 ,用数组存储的时候,并不是同一个2,这样的话呢,我们再创建一个数组w[] 这样正好就可以用于存储边值,因为每个节点都是不一的idx,正好就是不一样的边了,那就存储边值。
那我们怎么走出 1 -> 2 -> 4的路径呢?
我们再创建一个数组 h[] 这个存储的是,每个头结点连接的都是什么节点?
我们用h 找到 1节点 连接的是 2,把 2 当做头结点,在h[2]中找,发现h[2] = 3 则 2 连接 e【3】 = 5,再找到ne[5] = 2 找到 e[2] = 4
也就是我们先从h[]中找到头结点,然后根据头结点所连接的节点的ne寻找4(在这里我们就明白,每次只能走一步,因为我们找到4后 又得根据 h[4] 去寻找 4连接的。而不是根据ne[4])
具体如图