C语言链表定义的一些疑惑

发布于 2022-09-06 02:24:00 字数 525 浏览 15 评论 0

刚学完C语言,最近在学数据结构,看的是《算法精解——C语言描述》。关于里面的链表的定义,有不懂的地方,希望有前辈能指点一下小白。

#ifndef LIST_H
#define LIST_H
#include <stdlib.h>
//定义链表结点
typedef struct ListElmt_
{
    void *data;
    struct ListElmt_ *next;
} ListElmt;
//定义链表
typedef struct List_
{
    int size;
    int (*math)(const void *key1, const void *key2);
    void (*destory)(void *data);
    ListElmt *head;
    ListElmt *tail;
} List;

这里面int(*math)(const void *key1,const void *key2);是用来干什么的啊,我有试过去掉也没什么影响啊

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

岛歌少女 2022-09-13 02:24:00

定义了一个函数指针math(更合适的名字应该是match吧?),接受两个const void*实参返回int。在原生列表中这么做的目的在于告诉用户应当如何处理match操作,即定义了一个模板。这里的意义在于告诉用户,比较函数不应该试图修改key,所以模板中是const void *。 如果你实现了如下函数:

int isMatch(const void *l1, const void*l2);

那么你可以让match指针指向该函数,并调用->match

鹿童谣 2022-09-13 02:24:00

推荐一个教程系列,不妨看完再结合书本,理解起来容易很多。
http://study.163.com/course/c...

我要还你自由 2022-09-13 02:24:00

int(math)(const void key1,const void *key2);是一个函数指针,就跟库函数qsort一样需要传递一个比较函数指针作为如何排序使用。没有看到这个函数指针的实现,光从这个结构体定义来看根本无法推测。从经验上来说你链表接受的类型是void(任意的),那么该函数指针应该是用于查询链表位置的时候判断是否等于用的,因为不知道类型不能简单的使用==,需要传一个判断等于的函数指针判断是否相等,以上个人观点

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文