有没有更有效的方法将 n 叉树存储在 C 文件中?
Is there a more efficient way to store an n-ary tree in a file in C?
比如说我正在写一个冒险游戏。该地图由不同类型的图块构建。我有形成路径的瓷砖,形成门的瓷砖,等等。
我将使用结构来描述图块的类型和内容,以及它连接到的其他图块。
那我做一个四链表把它们都连起来。
但是描述房间的结构比描述门的结构包含的元素要多得多,因此门结构中的许多元素都是多余的。我可以制作一个更小的门结构,但结构只能指向相同类型的结构*,所以我无法将房间结构连接到门结构。冗余可能可以忽略不计,但我想知道是否有另一种方式。
另一种选择是使用结构数组,但这样我会有很多 'padding' 结构浪费更多 space。然而,数组将使从文件读取和重新构建地图变得更加容易。
有什么方法可以解决结构只能指向同一类型结构的限制吗?或者还有其他我没有提到的常见解决方案吗?
我的一个想法是每个图块都可以有指向其他所有类型图块的指针。有些是多余的,但比上面的选项要少一些。
*我的意思是,通常在链表中,结构包含指向与其所在类型相同的结构的指针。
不是将元素存储在图块中,而是仅存储指向元素链表的指针。
您真的不必使用统一的结构来描述所有内容。相反,您可以执行以下操作(这有点像在 C 中编写您自己的 C++ 虚拟表,并且使用非常广泛)。
您的基本磁贴结构可以如下所示:
struct tile
{
// common tile stuff
...
enum tile_type type;
void *type_info;
};
因此,在此结构中,您可以存储每种图块类型共有的内容。然后为其他类型创建其他结构:一个用于房间,一个用于路径等。在 tile
的对象中,您使 enum
描述实际类型,并存储指向void *
.
内的具体类型
有许多链接描述了此技术的变体。 Here的一个。
比如说我正在写一个冒险游戏。该地图由不同类型的图块构建。我有形成路径的瓷砖,形成门的瓷砖,等等。
我将使用结构来描述图块的类型和内容,以及它连接到的其他图块。
那我做一个四链表把它们都连起来。
但是描述房间的结构比描述门的结构包含的元素要多得多,因此门结构中的许多元素都是多余的。我可以制作一个更小的门结构,但结构只能指向相同类型的结构*,所以我无法将房间结构连接到门结构。冗余可能可以忽略不计,但我想知道是否有另一种方式。
另一种选择是使用结构数组,但这样我会有很多 'padding' 结构浪费更多 space。然而,数组将使从文件读取和重新构建地图变得更加容易。
有什么方法可以解决结构只能指向同一类型结构的限制吗?或者还有其他我没有提到的常见解决方案吗?
我的一个想法是每个图块都可以有指向其他所有类型图块的指针。有些是多余的,但比上面的选项要少一些。
*我的意思是,通常在链表中,结构包含指向与其所在类型相同的结构的指针。
不是将元素存储在图块中,而是仅存储指向元素链表的指针。
您真的不必使用统一的结构来描述所有内容。相反,您可以执行以下操作(这有点像在 C 中编写您自己的 C++ 虚拟表,并且使用非常广泛)。
您的基本磁贴结构可以如下所示:
struct tile
{
// common tile stuff
...
enum tile_type type;
void *type_info;
};
因此,在此结构中,您可以存储每种图块类型共有的内容。然后为其他类型创建其他结构:一个用于房间,一个用于路径等。在 tile
的对象中,您使 enum
描述实际类型,并存储指向void *
.
有许多链接描述了此技术的变体。 Here的一个。