これは、構造体へのポインターの配列を格納しているためです。それはかなり違います。
内部に同じ構造体を持つことはできません。それは無限に再帰的な定義になります。
さて、あなたのプログラムをもっと見せていただければ、あなたのプログラムが期待通りに動かない理由を理解するのに役立つかもしれません. ポインターが正確に何であるかについて混乱しているため、ポインターを初期化していない可能性があります。
[編集]いくつかのコードを投稿したので、何が問題なのかを正確に述べていないことを無視して、グラフを調べながらポインターリスト全体を反復しようとしていると思いますが、それを初期化していません.
するとmalloc
、メモリは初期化されません。C での標準的な方法は、calloc
すべてのバイトをゼロに設定する代わりに使用することです。nodes
配列をリストとして使用しているように見えるのでnum_edges
、ノードにフィールドを追加し、2 つのノードで双方向の結合を行う関数を作成することができます。
struct node {
int num_edges;
struct node *nodes[MAX];
};
int join( struct node *a, struct node *b )
{
if( a->num_edges >= MAX || b->num_edges >= MAX ) return 0;
a->nodes[a->num_edges++] = b;
b->nodes[b->num_edges++] = a;
return 1;
}
次のように からa
へのエッジがあるかどうかをテストすることもできます。b
int has_edge( struct node *a, struct node *b )
{
int i;
for( i = 0; i < a->num_edges; i++ ) {
if( a->nodes[i] == b ) return 1;
}
return 0;
}