指向两种不同类型节点的指针
Pointers to two different types of nodes
我在c++中编码一个哈希树,在那里我需要两种不同类型的节点,即一种用于非叶子,将简单地指向它的孩子和其他叶子节点,其中包含所需的信息。
我面临的问题是如何在非叶节点中声明指针。因为一些非叶节点要指向其他非叶节点而一些非叶节点要指向叶节点。所以我不能声明一种指向非叶节点指针的指针类型。
与其有一个叶节点和一个无叶节点,不如只有一个带数据指针的节点类。如果节点不是叶节点,则数据指针为NULL
。如果节点是叶节点,则Node*
将是NULL
。
struct Node
{
Node *child; // NULL if leaf node
Data *data; // NULL if not leaf node
};
我将使用一个并集和一个标头来处理这个问题,该标头告诉我所讨论的指针是指向节点还是叶子。
struct Header
{
int isLeaf;
}
struct Leaf
{
struct Header header;
struct LeafBody body;
}
struct Node
{
struct Header header;
struct NodeBody body;
}
union Entity
{
struct Header header;
struct Node node;
struct Leaf leaf;
}
有几种解决方案。您可以简单地从叶子继承一个非叶子,并让多态性处理它。或者使用联合和标志来确定使用哪一个。或者最脏的,但有时有效的,是一个简单的void*,你总是可以把它转换回你需要的任何东西。根据您的具体需求:联合将执行得最好,多态性将是最易读的,void*将与联合具有相同的性能,如果您不喜欢联合,则根据您的喜好编写更简洁的代码。
相关文章:
- 函数无法识别我在C++传递节点指针向量?
- 交换树数据结构中根的 2 个子节点指针
- 如何将链表的节点直接链接到节点指针
- 在我的C++链表实现中取消引用节点指针,给出意想不到的结果
- 如何删除节点指针
- 节点指针内的指针
- 无法返回节点指针
- 如何使运算符++继续到链表中的下一个节点指针
- 使用模板返回节点指针
- 霍夫曼树中的左节点和右节点指针不指向任何内容
- 使用节点指针数组来指向节点的子节点
- 用C++在树中分配节点指针
- C++分配节点指针
- 如何将节点指针添加到矢量指针
- 创建节点指针数组
- C++:无法在ostream和运算符<<中创建节点指针
- 函数返回节点指针
- 序遍历的二叉搜索树,没有节点指针作为参数
- c++中仅使用节点指针的反向链表
- 列表节点指针"未在此范围内声明"?