刚学完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);
是用来干什么的啊,我有试过去掉也没什么影响啊
定义了一个函数指针math(更合适的名字应该是match吧?),接受两个
const void*实参
并返回int
。在原生列表中这么做的目的在于告诉用户应当如何处理match操作
,即定义了一个模板
。这里的意义在于告诉用户,比较函数不应该试图修改key,所以模板中是const void *。 如果你实现了如下函数:那么你可以让match指针指向该函数,并调用
->match