【发布时间】:2020-10-09 17:41:51
【问题描述】:
这是我的代码:
#define V 5
typedef struct edge* link;
//structure for reprenting edges
typedef struct edge{
int dst; //number of destination node
//int weight; //for weigthed graphs
link next; //link to next edge
} edge_t;
link new_edge(int dst, link next) {
link edge = (link) malloc(sizeof(edge_t));
edge->dst = dst;
edge->next = next;
return edge;
}
int main() {
link edge;
link adj[V];
//the array contains V pointers to lists of edges
//each list for each node of my graph
int i;
int j;
//all lists are empty at beginning
for (i = 0; i < V; i ++) {
adj[i] = NULL;
}
printf("input the edges:\n");
while (scanf("%d %d", &i, &j) == 2) {
adj[i] = new_edge(j, adj[i]);
//in the list for node i
//put the edge to node j
adj[j] = new_edge(i, adj[j]); //if it is undirect
//in the list for node j
//put the edge to node i
}
printf("adjacency list is: \n");
//cycle over the nodes
for (i=0; i<V; i++) {
if (adj[i] == NULL) {
printf("%d is null list\n", i);
}
//print all the edges for that node
for (edge = adj[i]; edge != NULL; edge = edge -> next) {
printf("edge %d -> %d\n", i, edge->dst);
}
}
}
输入:
0 1
0 2
1 3
停止
输出:
邻接表是:
边缘 0 -> 2
边缘 0 -> 1
边缘 1 -> 3
边缘 1 -> 0
边缘 2 -> 0
边缘 3 -> 1
4 为空列表
这张图片显示了我的 new_edge 函数是如何工作的,蓝色区域(图片中)正在发生变化,所以我可以遍历列表,所以我的问题是为什么蓝色区域等于 NULL?,导致它指向列表中的最后一项,我认为它不会为 NULL(P.S 当我遍历列表以打印它时,我验证它为 null)。
【问题讨论】:
-
你的问题是为什么
adj[4]为空? -
不,列表中的第一个(指针又名 adj[0])将为 null 我在问它
标签: c linked-list graph-algorithm undirected-graph