- 论坛徽章:
- 0
|
struct set {
int length;
unsigned timestamp;
int (*cmp)(const void *x, const void *y);
unsigned (*hash)(const void *x);
int size;
struct member {
struct member *link;
const void *member;
} **buckets;
};
void *Set_remove(struct set* set, const void *member) {
int i;
struct member **pp;
assert(set);
assert(member);
set->timestamp++;
i = (*set->hash)(member)%set->size;
for (pp = &set->buckets; *pp; pp = &(*pp)->link)
if ((*set->cmp)(member, (*pp)->member) == 0) {
struct member *p = *pp;
*pp = p->link;
member = p->member;
FREE(p);
set->length--;
return (void *)member;
}
return NULL;
}
这个是《C语言接口与实现》讲集合那一章中的,
这个函数是不是首先要搜索匹配member的那个节点,然后删掉它啊,
我搞不懂的是为什么要用struct member *pp,这是不是简单问题搞复杂化了,而且我觉得这个函数有点问题,请大家指点下 |
|