C 如果不使用';我不知道一个父母可能有多少个孩子?

C 如果不使用';我不知道一个父母可能有多少个孩子?,c,tree,filesystems,C,Tree,Filesystems,这是我一直在理论上挣扎的问题,但在网上还没有找到任何好的答案。我以前用二叉树编写过程序,这很简单:每个节点有两个链接。但现在我正在为一个项目规划一个基于树的文件系统,我不知道如何继续。问题是: 我想要一个树,它有指向叶子文件的指针和指向内部节点子目录的指针(我想Unix就是这样做的?)。但是,如果用户希望创建新文件或目录,则必须增加父节点中的链接数 在设计结构时,如何解释这一点?我不确定除了硬编码(比如10个链接)和将目录成员限制在这些链接之外,我还有什么选择。有什么建议吗?(哈,明白了吗?)

这是我一直在理论上挣扎的问题,但在网上还没有找到任何好的答案。我以前用二叉树编写过程序,这很简单:每个节点有两个链接。但现在我正在为一个项目规划一个基于树的文件系统,我不知道如何继续。问题是:

我想要一个树,它有指向叶子文件的指针和指向内部节点子目录的指针(我想Unix就是这样做的?)。但是,如果用户希望创建新文件或目录,则必须增加父节点中的链接数

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


如果没有,是否有人知道有什么好的资源可以让我了解更多?正如我所说,到目前为止,我在互联网上的搜索都是徒劳的。

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

请原谅我的ASCII图形:

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

这使得遍历子节点非常困难,因为要获得第n个子节点,您需要访问前面的n-1个子节点,但我认为这是一种可行的方法。

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

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


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

以下是Linux如何处理目录

您可以使用子对象的链接列表。e、 g:

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

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

使节点的数据成员=>1.data 2.leftchild 3.rightsibling

假设父母有k个孩子。 父节点中的leftchild指针将指向第一个子节点。。 第二个子项将由第一个子项中的rightsibling指针指向。。 以类似的方式与孩子(1 这允许我们从父级导航到子级,反之亦然。。
注意:虚拟节点只是最后一个子目录的一个指示符…

UNIX通常通过将目录设置为任意长度的文件来实现,其中的内容是每个子文件的名称/索引节点号/directory如果您真的想设计基于树的文件系统,请像btrfs那样,将所有内容都存储在一个大的b+树中al to grock,但非常优雅。这可能是最明智的方法,尽管它会给您带来搜索问题,正如建议的那样。+1用于费心编写ascii图形。这是一个好主意。我之所以想到这棵树是因为搜索和插入时间很快,但这可能并不重要。感谢您的支持救命啊!