[英]Adjacency List in C for undirected (unweighted) graph
這是我的代碼:
#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
停止
OUTPUT:
鄰接表是:
邊 0 -> 2
邊 0 -> 1
邊 1 -> 3
邊 1 -> 0
邊 2 -> 0
邊 3 -> 1
4是null列表
這張圖片顯示了我的new_edge function 是如何工作的,藍色區域(在圖片中)正在改變,所以我可以遍歷列表,所以我的問題是為什么藍色區域等於 NULL?,因為它指向列表中的最后一項,我認為它不會為 NULL(當我遍歷列表以打印它時,我驗證它是 null)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.