グラフを表すために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]として宣言するのか理解できません。これがどのように機能するか説明していただけますか?
私はかなり混乱しているので、質問が明確であることを願っています。