这是我在理论上一直在努力的事情,但在网上找不到任何好的答案。我之前用二叉树编写程序,这很简单:每个节点都有两个链接。但是现在我正在计划一个基于树的文件系统用于项目,我不知道如何继续。这是麻烦:
我想要一个树,其中包含指向内部节点的叶子和子目录的文件的指针(我认为这是Unix的用法吗?)。但是,如果用户想要创建新文件或目录,则必须增加父节点中的链接数。
我在设计结构时如何解释这一点?除了硬编码之外,我不确定我的选择是什么,例如,10个链接和限制目录成员。有什么指针吗? (哈,明白吗?)
如果没有,是否有人知道有什么好的资源我可以在这里了解更多信息?就像我说的那样,到目前为止,我的互联网搜索一直没有结果。
答案 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)
您可以使用动态分配的数组,并存储数组指针及其大小。当你需要编辑它时,你只需重新分配它。
但是,在这种情况下,你应该在操作系统和文件系统书籍,文章,科学杂志/出版物等中搜索公认的解决方案。