当您不知道父母可能有多少孩子时,如何实施n-ary树?

时间:2012-04-12 13:57:14

标签: c tree filesystems

这是我在理论上一直在努力的事情,但在网上找不到任何好的答案。我之前用二叉树编写程序,这很简单:每个节点都有两个链接。但是现在我正在计划一个基于树的文件系统用于项目,我不知道如何继续。这是麻烦:

我想要一个树,其中包含指向内部节点的叶子和子目录的文件的指针(我认为这是Unix的用法吗?)。但是,如果用户想要创建新文件或目录,则必须增加父节点中的链接数。

我在设计结构时如何解释这一点?除了硬编码之外,我不确定我的选择是什么,例如,10个链接和限制目录成员。有什么指针吗? (哈,明白吗?)

如果没有,是否有人知道有什么好的资源我可以在这里了解更多信息?就像我说的那样,到目前为止,我的互联网搜索一直没有结果。

6 个答案:

答案 0 :(得分:7)

您可以简单地使用儿童的链接列表。

请原谅我的ASCII图形:

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

这使得孩子们走路时非常琐碎,因为要获得 n :孩子,你需要访问前面的孩子们的 n -1,但我认为这是一种可行的方法。

答案 1 :(得分:2)

您可以使用儿童的链接列表。 e.g:

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

struct children_list {
   struct tree* child;
   struct children_list* next;
}

答案 2 :(得分:1)

以下是Linux处理目录的方式 http://en.wikipedia.org/wiki/Inode_pointer_structure

答案 3 :(得分:1)

制作一个包含数据成员=>的节点1.data 2.leftchild 3.rightsibling

假设父母有k个孩子。 父节点中的左子指针将指向第一个子节点。 第1个孩子将通过rightibling指针指向第2个孩子。 以类似的方式ith孩子(1

这允许我们从父母导航到儿童和儿童。反之亦然.. 注意:虚拟节点只是最后一个孩子的指标......

答案 4 :(得分:0)

一个简单的解决方案是在每个树节点中都有一个列表。

答案 5 :(得分:0)

您可以使用动态分配的数组,并存储数组指针及其大小。当你需要编辑它时,你只需重新分配它。

但是,在这种情况下,你应该在操作系统和文件系统书籍,文章,科学杂志/出版物等中搜索公认的解决方案。