1.邻接表边的插入代码查错:
void InsertEdge(AGraph* G, int v1, int v2)
{
ArcNode* p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = v2;
p->nextarc = G->adjlist[v1].firstarc;
G->adjlist[v1].firstarc = p;
/*无向图再加入下面一段代码*/
p = (ArcNode*)malloc(sizeof(ArcNode));//不可将p置空,因为要再新插入一个结点,必须给这个结点开辟一个空间
p->adjvex = v1;
p->nextarc = G->adjlist[v2].firstarc;
G->adjlist[v2].firstarc = p;
free(p);
}
错误原因:最后一个语句,free(p)。这里不能释放结点空间,因为刚刚插入链表的边结点的地址依旧存放在p里,free(p)的意思就是把这个结点的空间释放掉,相当于删除了刚刚插入的结点。