什么是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/