免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1143 | 回复: 0
打印 上一主题 下一主题

有关一个函数的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-07 16:16 |只看该作者 |倒序浏览
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,这是不是简单问题搞复杂化了,而且我觉得这个函数有点问题,请大家指点下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP