2

これは私が理論的に苦労してきたことですが、オンラインで良い答えは見つかりませんでした。私は以前に二分木を使ってプログラムを書いたことがありますが、それは簡単でした。各ノードには2つのリンクがありました。しかし今、私はプロジェクトのツリーに基づいたファイルシステムを計画しており、どのように進めるかがわかりません。ここに問題があります:

リーフのファイルと内部ノードのサブディレクトリへのポインタを持つツリーが必要です(これがUnixのやり方だと思いますか?)。ただし、ユーザーが新しいファイルまたはディレクトリを作成する場合は、親ノードのリンク数を増やす必要があります。

構造を設計するときに、これをどのように説明できますか?たとえば、10個のリンクをハードコーディングし、ディレクトリメンバーをそれに制限する以外に、自分のオプションが何であるかはわかりません。ポインタはありますか?(ハァッ、わかった?)

そうでない場合、私がこれについてもっと学ぶことができる良いリソースを誰かが知っていますか?私が言ったように、これまでのところ私のインターネット検索は無益でした。

4

6 に答える 6

7

子のリンクリストを使用するだけです。

私のASCIIグラフィックを許してください:

+------+
|parent|
+------+
   |
   |
   \    +-----------+     +----------+       +----------+
    --->|first child|---->|next child|--...->|last child|-->NULL
        +-----------+     +----------+       +----------+

これにより、 n番目の子を取得するには、 n -1個の先行する子を訪問する必要があるため、子を歩くのが少し難しくなりますが、これは実行可能なアプローチであると思います。

于 2012-04-12T13:59:59.353 に答える
2

子のリンクリストを使用できます。例えば:

struct tree {
   /* data */
   struct children_list* children;
}

struct children_list {
   struct tree* child;
   struct children_list* next;
}
于 2012-04-12T14:02:18.377 に答える
1

Linuxがディレクトリを処理する方法は次のとおりです http://en.wikipedia.org/wiki/Inode_pointer_structure

于 2012-04-12T14:01:31.620 に答える
1

データメンバーでノードを作成する=>1.data2.leftchild 3.rightsibling

親にk人の子供がいるとします。1番目の子は親ノードの左子ポインターによってポイントされます。2番目の子は1番目の子のrightsiblingポインターによってポイントされます。同様の方法でi番目の子(1

これにより、親から子へ、またはその逆のナビゲーションが可能になります。注:ダミーノードは、最後の子の単なるインジケーターです...

于 2013-01-20T13:59:59.790 に答える
0

簡単な解決策は、各ツリーノードにリストを作成することです。

于 2012-04-12T14:00:16.570 に答える
0

動的に割り当てられた配列を使用して、配列ポインターとそのサイズを格納できます。編集する必要がある場合は、再割り当てするだけです。

ただし、このような状況では、OSやファイルシステムの本、記事、科学雑誌/出版物などで受け入れられているソリューションを検索する必要があります。

于 2012-04-12T14:01:08.630 に答える