【发布时间】:2012-02-26 07:47:02
【问题描述】:
我们正在课堂上学习 B 树,并被要求在代码中实现它们。老师把编程语言的选择留给了我们,我想尝试用 C# 来做。我的问题是以下结构在 C# 中是非法的,
unsafe struct BtreeNode
{
int key_num; // The number of keys in a node
int[] key; // Array of keys
bool leaf; // Is it a leaf node or not?
BtreeNode*[] c; // Pointers to next nodes
}
具体来说,不允许创建指向结构本身的指针。我可以使用一些解决方法或替代方法吗?我相当确定在托管代码中必须有一种方法可以做到这一点,但我无法弄清楚。
编辑: 埃里克的回答为我指明了正确的方向。这是我最终使用的,
class BtreeNode
{
public List<BtreeNode> children; // The child nodes
public static int MinDeg; // The Minimum Degree of the tree
public bool IsLeaf { get; set; } // Is the current node a leaf or not?
public List<int> key; // The list of keys
...
}
【问题讨论】:
-
为什么要使用结构体而不是类?
-
当然B树也可以使用C#
-
除非您是专家,否则不要尝试在 C# 中使用不安全的代码;你会弄错的,这将是痛苦和困难的。相反,首先要学习安全的做事方式; C# 的设计使得安全的做事方式几乎总是比不安全的方式更容易。
-
@HenkHolterman 这只是一个学术练习,可以基本了解 B 树的功能,对于带有类和引用的 C# 来说很好。如果 OP 的任务是使用 B-tree 为数据库引擎实现索引,那么我会告诉他使用指针/结构,并使用 C++ 工作。
-
@Henk Holterman,正如上面提到的 Servy,这是一个学术练习,目的是让我们熟悉 B 树的工作。具体来说,我们的老师希望我们实现课本算法来插入/删除/搜索节点。在概念层面上,我理解(我认为)文本中写的内容,但在 C# 中实现相同的内容让我很难过。如果我想不通,我打算转向 VC++,但这也意味着要从头开始学习另一种语言...... :(