0

Cでポインタを持つディレクトリを持つツリーを作成しようとしています.

Java のクラスに似た、ある種のポインタ付き構造体を使用する方が簡単だと思いました。

だから私はこのようなものを使用します:

  struct d
  {
      struct d *up /*point to parent*/
      struct d *down /*point to child*/
      struct d *right /*point to right*/
  }

  generate_tree(struct **d)
  {
   /*my code*/
  }

複数の構造体を作成して接続しようとしています。したがって、私がしなければならないことは、ディレクトリのポインターを作成して割り当て、構造体 d を初期化し、作成されたポインターが構造体 d 内を指すようにすることです。私の質問は、どのように d を作成し、*up、*down、および *right を設定するかということです。

助けてくれてありがとう

4

1 に答える 1

0

struct dを動的に割り当てますmalloc()。すなわち、

struct d *dp = malloc(sizeof(*dp));

新しく作成された へのポインタを取得しstruct dたら、他の C 構造体と同じようにそのフィールドに代入します。

dp->up = /* ... */;
dp->down = /* ... */;
dp->right = /* ... */;

もちろん、秘訣はそれらのフィールドに何を割り当てるかです。まあ、それらの型から、struct d *へのポインタでなければなりませんstruct d。したがって、何もないことを示す NULL ポインター定数を割り当てるか、他のstructd dオブジェクトのアドレスを割り当てます。例えば、

struct d *up = malloc(sizeof(*up));
struct d *down = malloc(sizeof(*down));
struct d *right = malloc(sizeof(*right));

d->up = up;
d->down = down;
d->right;

この構造体がおもちゃの例以上のものであることを意図しているかどうかはわかりませんが、ある種のツリー構造のノードのように見えます。その場合は、このポインター操作のほとんどを非表示にするさまざまなヘルパー関数を作成する必要があります。

struct d *new_node() { /* allocate a new d,  set all fields to NULL */ }
void insert_node_in_tree(struct d *tree, struct d *node) { ... }

構築しているものが何であれ、関連する操作についても同様です。

于 2012-10-16T02:15:27.787 に答える