有没有办法在 C 中创建通用数据结构并根据存储的数据类型使用函数,该结构具有各种类型的数据,例如可以根据存储的数据进行打印。
例如,
假设我希望创建一个只存储 float 和 int 的二叉搜索树。自然的方法是创建一个包含 int 和 float 的枚举。它看起来像这样:
Typedef enum {INT, FLOAT} DataType;
Typedef struct node
{
void *data;
DataType t;
struct node *left,
*right;
}Node;
如果我想打印出来:
void printTree(Node *n)
{
if (n != NULL)
{
if (n->t == INT)
{
int *a = (int *) n->data;
printf("%d ", *a);
}
else
{
float *a = (float *) n->data;
printf("%f ", *a);
}
printTree(n->left);
printTree(n->right);
}
}
没关系,但我想将另一种数据类型存储为堆栈、查询或其他内容。这就是为什么我创建了一个不依赖于特定数据类型的树,例如:
Typedef struct node
{
void *data;
struct node *left,
*right;
}Node;
如果我想打印出来,我使用回调函数,例如:
Node *printTree(Node *n, void (*print)(const void *))
{
if (n != NULL)
{
print(n->data);
printTree(a->left);
printTree(a->right);
}
}
但是当我尝试插入一个整数和一个浮点数并将其打印出来时,它会崩溃。我的问题是,是否有一种方法可以创建通用数据结构,即例程在一种情况下依赖于特定数据类型,但在另一种情况下则不依赖于混合数据类型?在这种情况下,我应该创建一个存储 int 和 float 的结构来存储它,并使用像回调函数中的第一个打印代码中那样的打印函数?
观察:我刚刚在结构中声明了一个节点,并在其上做了一切尝试简化,但想法是将结构与 .h 和 .c 以及所有涉及数据结构的抽象一起使用。