gpt4 book ai didi

C能完全抽象出数据结构吗?

转载 作者:太空宇宙 更新时间:2023-11-04 02:56:12 25 4
gpt4 key购买 nike

我目前正在构建一个个人数据结构库,我意识到可以通过将其中的数据设为 void * 来完全抽象它们。假设我创建了一个链表

typedef struct node_ll {
void *data;
struct node_ll *next;
} node_ll;

假设我正在创建一个结构链表,它们被定义为

struct person {
char *name;
int age;
};

那么,是否可以定义一个抽象的搜索方法

void *traverse(void *head, void* data) {}

要找到一个 19 岁且名字为“John”的人?

最佳答案

要使您的列表数据结构抽象,只需在源文件中隐藏 node_ll 结构的定义。头文件将只包含前向声明和 API 的原型(prototype):

typedef struct node_ll node_ll;
typedef struct linkedlist { node_ll *head; } linkedlist;

static inline linkedlist make_linkedlist () {
const linkedlist zero_ll = { 0 };
return zero_ll;
}
void unmake_linkedlist (linkedlist *list);

void linkedlist_add (linkedlist *list, void *data);
void linkedlist_traverse_until (linkedlist *list,
int (*visit)(void *visit_data, void *data),
void *visit_data);

linkedlist_traverse_until() 函数基本上会在每个节点上调用提供的 visit() 函数,除非 visit() 返回 0,在它在哪一点停止。该函数的实现知道如何访问 node_ll,因为它在具有 struct node_ll 完整定义的源文件中。

while (node) {
if (visit(visit_data, node->data)) {
node = node->next;
continue;
}
break;
}

关于C能完全抽象出数据结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17069294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com