首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据结构可以在C中完全抽象吗?

数据结构可以在C中完全抽象吗?
EN

Stack Overflow用户
提问于 2013-06-12 23:22:32
回答 1查看 94关注 0票数 1

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

代码语言:javascript
复制
typedef struct node_ll {
    void *data;
    struct node_ll *next;
} node_ll;

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

代码语言:javascript
复制
struct person {
    char *name;
    int age;
};

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

代码语言:javascript
复制
void *traverse(void *head, void* data) {}

去找一个19岁的叫“约翰”的人?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-13 00:10:40

要使列表数据结构变得抽象,只需在源文件中隐藏node_ll结构的定义。头文件将只包含转发声明和API的原型:

代码语言:javascript
复制
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定义的源文件中。

代码语言:javascript
复制
while (node) {
    if (visit(visit_data, node->data)) {
        node = node->next;
        continue;
    }
    break;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17069294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档