資源簡介
純C實現的通用紅黑樹容器不好找,于是自己琢磨著實現了一個。
算法部分直接剪裁自Linux內核中的rbtree
作者主要是在此基礎上封裝了一個通用的容器
里面含有 test例子 以及 benchmark基準測試
另外這個是Windows和Linux都可以用的
由于Linux內核的rbtree用了很多C99語法,筆者還得寫了一些宏改造內核代碼
Linux下的make是完整的
Windows下提供了VS08版的sln文件(只有test木有benchmark)
附帶了一個C++里面的STL Map的benchmark
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?“rbtree_container.h“
#define?TEST_SIZE?100000
#define?SRAND?0x1234
//#define?SRAND?(time(NULL))
int?compare(void?*key1?void?*key2)
{
return?*((int*)key1)?-?*((int*)key2);?
}
int?main(void)
{
rbtree_container?tree;
rbtree_container_node?*pc?*apc[TEST_SIZE];
int?i?ret?insert_failed?find?find_failed?tree_size;
struct?timeval?begin?end;
rbtree_container_init(&tree?sizeof(int)?compare);
printf(“rbtree_container?benchmark?go?...?\n\n“);
srand(SRAND);
/*
?*?內存分配
?*/
printf(“malloc?%d?times...\n“?TEST_SIZE);
gettimeofday(&begin?NULL);
for(i=0;?i {
apc[i]?=?rbtree_container_node_malloc(&tree?4);
}
gettimeofday(&end?NULL);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-08-05?14:14??rbtree_container\
?????文件????????3149??2012-07-29?14:40??rbtree_container\benchmark.c
?????文件?????????859??2012-07-29?14:49??rbtree_container\Makefile
?????文件???????10283??2012-07-27?18:46??rbtree_container\rbtree.c
?????文件????????5967??2012-08-05?14:10??rbtree_container\rbtree.h
?????文件????????3850??2012-08-05?14:05??rbtree_container\rbtree_container.c
?????文件????????2820??2012-08-05?16:01??rbtree_container\rbtree_container.h
?????文件?????????900??2012-08-05?14:12??rbtree_container\rbtree_container.sln
?????文件????????2120??2012-07-29?14:39??rbtree_container\STL_map_benchmark.cpp
?????文件????????5268??2012-07-29?01:45??rbtree_container\test.c
?????目錄???????????0??2012-08-05?14:13??rbtree_container\vs\
?????文件????????3921??2012-08-05?14:06??rbtree_container\vs\rbtree_container.vcproj
- 上一篇:小波濾波和小波包程序
- 下一篇:字符串/通配符匹配C++
評論
共有 條評論