什么是C中的通用列表操作函数?
(当我阅读一些 Material 时,我看到了这一点。)

此函数和可以接受任何类型的元素的函数有什么区别?

他们是...吗?如果它们不相同,我们如何分别实现它们?

最佳答案

通用列表可能是单链接的,并且可能假定列表中的项目具有如下结构:

typedef struct list_item list_item;

struct list_item
{
    list_item *next;
    ...data for node...
};

使用此布局,您可以编写仅使用下一个指针来操纵列表的函数。

有时,“...data for node...”将是一个简单的“void *”;也就是说,列表项将包含指向列表中下一个节点的指针(如果没有下一个节点,则为NULL)和指向数据的指针。
typedef struct list list;

struct list
{
    list *next;
    void *data;
};

由于您可以将任何指针强制转换为“void *”,因此列表中可以混合使用多种数据类型-但是您的代码必须知道如何处理它们。

您询问有关“一个”通用列表函数的信息,但可能没有一个单一的功能就能完成所有设计,而且肯定不是一个简单的设计。有许多可能的功能集可以构成通用列表功能。受Lisp启发的一组作品包括:
void *car(list *lp);    // Return the data for the first item on the list
list *cdr(list *lp);    // Return the tail of the list
list *cons(list *lp1, list *lp2);   // Construct a list from lists lp1 and lp2

list *cond(list *lp, void *data);  // Append data item to list

您可能希望提供测试列表是否为空以及其他一些项目的功能。

在Koenig的“Ruminations on C++”中找到了一个很好的阐述,用C++是公认的。这些想法可以很容易地适应C语言-并不困难(尽管C语言中的存储管理比C++中的困难)。

关于c - C中的通用列表操作功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/326202/

10-14 18:14
查看更多