一、摘要 有一段建立邻接表的代码
void add(int a, int b)
{
e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}
对他进行分析,看他是怎么实现邻接表的建立的。
二、邻接表 ??邻接表是表示一个节点与其他节点的相连关系的。下面表示一个图,以及其邻接表。蓝色部分代表的是起点。 三、代码分析
void add(int a, int b)
{
e[idx] = b;
ne[idx] = h[a];
h[a] = idx ++ ;
}
??三、一:传统邻接链表实现 传统的模拟头插法插入节点实现邻接链表,仅展示一个节点的插入:
struct node{
int num;
node*next;
}
struct Firstnode{
node* next;
}
void insert(Firstnode[],int index)
{
node* Node = (node*)malloc(sizeof(node));
node.num = b;
node.next = Firstnode[index];
Firstnode[index] = node;
}
????我们观察两组代码,第二个代码其实就是省略了结构体的头插法建立邻接矩阵。读到这里我们要建立这样一个思维。模拟邻接矩阵中的节点(node)里面有num和next,分别是节点的信息和下一个节点的指针。Firstnode是单独存在的。 ????idx是一个节点数组小标的唯一标识。如下图,相同idx下标的e和ne就相当于模拟数组的一个node节点。h代表Firstnode。
下面是头插法的图示
|