3

你将如何在 C 中做一个功能纯链表?链接列表是我什至应该做的吗?我正在尝试创建一个对象列表,但我想不出如何在不修改外部状态的情况下将项目从函数添加到列表中。

我基本上想要这个:

void AddItemToList(Item item);

能够从任何地方被调用,而调用者不必担心要添加到哪个列表。

现在我只有:

void AddTypeToList(entityType_t *type, entityType_t *listHead)
{
    type->next = listHead;
    listHead = type;
}

void RegisterEntityType(entityType_t *type)
{
    AddTypeToList(type, typeList);
}

但这显然不起作用(或者是吗?),因为RegisterEntityType正在修改typeList. (这是一个全球性的entityType_t

4

1 回答 1

1

一般来说,你需要一个不同的功能,

List AddItemToList(List list, Item item);

因为您应该返回一个添加了项目的新列表,而不修改原始列表。这涉及其他问题,例如应该需要一个垃圾收集器来跟踪您将要创建和丢弃的中间列表。

我不认为 C 是实现函数式编程技术的最佳语言,您必须从头开始构建所有内容。显而易见的理想选择是纯函数式编程语言,或者至少是支持函数式技术的编程语言,例如 C++、C# 或 Python。

也许你想检查这个问题

希望这(以某种方式)有所帮助。

于 2013-05-31T10:56:08.343 回答