1
我想在C中創建一個數據結構來表示圖。我發現這是非常有用的鏈接:C結構圖,幫助理解結構
http://pine.cs.yale.edu/pinewiki/C/Graphs
在我看來,一個非常好的起點。但是我對理解數據結構有些問題。
struct graph {
int n; /* number of vertices */
int m; /* number of edges */
struct successors {
int d; /* number of successors */
int len; /* number of slots in array */
char is_sorted; /* true if list is already sorted */
int list[1]; /* actual list of successors */
} *alist[1];
};
我不明白爲什麼結構繼任聲明,因爲它是不以這樣的方式
struct graph {
int n; /* number of vertices */
int m; /* number of edges */
struct successors {
int d; /* number of successors */
int len; /* number of slots in array */
char is_sorted; /* true if list is already sorted */
int *list; /* actual list of successors */
} *alist;
};
正如我在相繼式功能看到創建圖形:
Graph
graph_create(int n)
{
Graph g;
int i;
g = malloc(sizeof(struct graph) + sizeof(struct successors *) * (n-1));
assert(g);
g->n = n;
g->m = 0;
for(i = 0; i < n; i++) {
g->alist[i] = malloc(sizeof(struct successors));
assert(g->alist[i]);
g->alist[i]->d = 0;
g->alist[i]->len = 1;
g->alist[i]->is_sorted= 1;
}
return g;
}
它爲alist分配更多空間,我不明白爲什麼要聲明它爲alist [1]。 你能解釋我是如何工作的嗎?
我希望問題很清楚,因爲我自己很困惑。
謝謝你的回答。你能不能更詳細些?我沒有得到'雙重間接'的東西。 – Zagorax