【发布时间】:2018-10-15 23:15:23
【问题描述】:
我正在做一个学校项目,我需要多个链表,每个链表都存储一个不同类型的值。到目前为止,我有这个:
struct list_element
{
struct list_element *next;
int data;
};
struct list
{
struct list_element *first;
};
还有一些与之配合使用的函数,如 initList(struct list *)、deleteList(struct list *)、add(struct list *) 等。
但我还需要一个列表,而不是 int 作为数据存储,例如 float。
在 C 中执行此操作的正确方法是什么?我是否只是创建另一个结构(list2)并且基本上只是复制和重命名与列表一起使用的一半函数?并有 initList2(struct list2 *)...
或者我应该创建类似的东西:
struct data
{
void *data;
char *data_type;
};
并将其存储在列表中?
我不喜欢这两个,但我没有其他想法。
【问题讨论】:
-
void *技术可能需要大小和指针。主要问题是确保存储在每个列表中的数据是同质的(因为如果不是,您需要信息来告诉您列表中每个条目的类型,这仍然会变得更加复杂)。另一个建议可以很好地工作,特别是如果您可以使界面对客户端不透明。对每种类型的函数集的名称要严格系统化。考虑一下是否应该迁移到 C++ 并支持模板。考虑是否在 C 中模拟模板。 -
当你使用 C++(我希望你这样做)你会觉得'啊哈,这就是他们有模板和泛型的原因,......我不得不在 C 中艰难地做到这一点'
-
@JonathanLeffler 在这个问题中没有 typedefs 和不完整的结构声明......我仔细检查过......你可以继续写一个答案。
-
我知道C++和它的模板,但是因为它是一个学校项目,我必须用C来做。
-
见stackoverflow.com/questions/18577404/…。问题是关于数组的,但这里可以使用相同的技术。
标签: c linked-list