免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2640 | 回复: 5

不知道猪脑带怎么想的,一不留神,又拉出一驼屎 [复制链接]

论坛徽章:
0
发表于 2011-07-31 11:14 |显示全部楼层
本帖最后由 peidright 于 2011-07-31 11:15 编辑
  1. typedef struct htable_s {
  2.         int hsize;
  3.         struct list_head *harray;
  4.         int (*cmp)(void *d1, void *d2);
  5.         int (*hash)(void *d);
  6. } htable_t;
  7. #define HTABLE_CREATE(htable, cmp_fn, hash_fn, size)\
  8.                 (htable)->cmp  = cmp_fn;\
  9.                 (htable)->hash = hash_fn;\
  10.                 htable->harray = malloc(size * sizeof(struct list_head));\
  11.                 (htable)->hsize  = size;\
  12.                 while(size) {\
  13.                         --size;\
  14.                         INIT_LIST_HEAD((&htable->harray[size]));\
  15.                 }

  16. #define HTABLE_TINSERT(htable, list_hook, entry)\
  17.                 list_add((&(entry)->list_hook),(&htable->harray[htable->hash(entry) % htable->hsize]));

  18. #define HTABLE_HINSERT(htable, list_hook, entry)\
  19.                 key = htable->hash(entry)%htable->hsize;\
  20.                 list_add_tail((&(entry)->list_hook),(&htable->harray[htable->hash(entry) % htable->hsize]));

  21. #define HTABLE_DELETE(htable, list_hook, entry)\
  22.                 list_del((&(entry)->list_hook));

  23. #define HTABLE_FIND(htable, list_hook, entry, retval) do{ \
  24.                 list_for_each((*((struct list_head **)retval)), (&htable->harray[htable->hash(entry) % htable->hsize])){\
  25.                         if (0==htable->cmp( list_entry(*retval,typeof(*entry), list_hook) , entry)) {\
  26.                                 break;\
  27.                         }\
  28.                 }\
  29.                 if((* (struct list_head**)retval) ==  &htable->harray[htable->hash(entry) % htable->hsize]) {\
  30.                         (*retval) = NULL;\
  31.                 }else {\
  32.                          (*retval) = list_entry(*retval, typeof(*entry), list_hook);\
  33.                 }\
  34. }while(0);

  35. #define HTABLE_DESTORY(htable)\
  36.                 free(htable->harray);
  37. #endif
复制代码
只能说,是相当sb的代码.  c不提供范型,大家有简结一点的hashtable的,对与 hashtable_entry 范形一点点的代妈么?
不接受下面这種.
struct {
    struct list_head list;
    void *
}

论坛徽章:
0
发表于 2011-07-31 11:56 |显示全部楼层
这算很不错的了

不吃草能跑的驴是没有的

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
发表于 2011-07-31 13:50 |显示全部楼层
hashtable代码多的是。

论坛徽章:
0
发表于 2011-07-31 14:00 |显示全部楼层
仔细一看, 原来是挂羊头卖狗肉的

论坛徽章:
2
天蝎座
日期:2014-03-28 10:18:052015年亚洲杯之乌兹别克斯坦
日期:2015-02-10 11:32:25
发表于 2011-07-31 15:31 |显示全部楼层
标题就有几个错别字

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
发表于 2011-08-01 09:03 |显示全部楼层
为什么一定要限定C?
直接用STL的吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP