对着 MIT 的
《Introduction to Algorithms, Second Edition 》 看了一段时间,对里面的提到的几种字典数据结构算法很感兴趣,因此照着书上的描述做了一些实现。使用 C++ 实现了:BinarySearchTree, RedBlackTree,
BalancedTree,
SkipList, SortedArray 。
源代码下载:
http://spdict.googlecode.com/files/spdict-0.2.src.tar.gz
http://code.google.com/p/spdict/downloads/list
只实现了字典的 3 个基本操作:search,insert,remove 。
class SP_Dictionary {
public:
virtual ~SP_Dictionary();
virtual int insert( void * item ) = 0;
virtual const void * search( const void * key ) const = 0;
virtual void * remove( const void * key ) = 0;
virtual int getCount() const = 0;
virtual SP_DictIterator * getIterator() const = 0;
};
另外还针对各种字典数据结构实现了 iterator 。
class SP_DictIterator {
public:
virtual ~SP_DictIterator();
virtual const void * getNext( int * level = 0 ) = 0;
};
在 version 0.2 中基于 SP_Dictionary 接口实现了一个 cache 类。
class SP_Cache {
public:
virtual ~SP_Cache();
virtual int put( void * item, time_t expTime = 0 ) = 0;
virtual int get( const void * key, void * resultHolder ) = 0;
virtual int erase( const void * key ) = 0;
virtual void * remove( const void * key, time_t * expTime = 0 ) = 0;
virtual SP_CacheStatistics * getStatistics() = 0;
};
程序包里面有一个测试程序,采用随机生成测试数据的方法,对各种不同的字典数据结构进行测试,可以方便地对比不同算法各种操作的性能。命令行的使用方法如下:
bash-2.05a$ ./testdict -v
./testdict [-t type] [-c count]
-t type :
bst ( brinary search tree )
rb ( red-black tree )
bt ( balanced tree )
sl ( skip list )
sa ( sorted array )
-c count, test how many items
程序在 linux 下开发,在 solaris 和 windows 平台也进行过测试。
linux/solaris 使用 Makefile 进行构建,windows 有相关的 vc++ 的工程文件。
分享到:
相关推荐
数据结构-Java实现一个简单的红黑树RedBlackTree,代码通过内部类和枚举来实现了一个简单的红黑树,包括了红黑树的插入、查找以及部分辅助函数。
红黑树(Red Black Tree)是一种自平衡二叉查找树,由计算机科学家Rudolf Bayer在1972年提出。这种数据结构在现代计算机科学中广泛应用,特别是在各种需要高效查找、插入和删除操作的场景中。红黑树的主要特点是通过...
红黑树C语言代码: #include "redblack.h" #include #include "fatal.h" 头文件: #include #include "fatal.h" typedef int ElementType; #define NegInfinity (-10000) #ifndef _RedBlack_H #define _Red...
红黑树(Red Black Tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉树的...
红黑树(Red-Black Tree)是一种自平衡的二叉查找树,由计算机科学家Rudolf Bayer在1972年提出。它在保持二叉查找树特性的同时,通过引入颜色属性来确保树的平衡,从而优化了查找、插入和删除操作的时间复杂度。红黑...
红黑树(Red-Black Tree)是一种自平衡二叉查找树,它在计算机科学中用于实现关联数组。这种数据结构最初由Rudolf Bayer在1972年发明,当时称为“对称二叉B树”,但在1978年由Leonidas J. Guibas和Robert Sedgewick...
在这个上下文中,GNU提供了一个源代码库,包含了两种著名的自平衡树:AVL树和红黑树。 **AVL树**: AVL树是由G. M. Adelson-Velsky和E. M. Landis于1962年提出的,是最早被发明的自平衡二叉查找树。AVL树的主要特性...
红黑树(Red-Black Tree)是一种自平衡二叉查找树,由计算机科学家Rudolf Bayer在1972年提出。它的名字来源于节点可能有的两种颜色:红色或黑色。红黑树的主要特性保证了其在操作上的高效性,如插入、删除和查找等...
红黑树(Red-Black Tree)是一种自平衡二叉查找树,由计算机科学家Rudolf Bayer于1972年提出。它在保持了二叉查找树基本特性的同时,通过额外的颜色属性实现了高效的插入、删除和查找操作。红黑树的名字来源于它的...
红黑树(Red-Black Tree)是一种自平衡二叉查找树,它在计算机科学中扮演着重要的角色,尤其是在数据结构和算法领域。红黑树的名字来源于它的节点颜色属性:红色或黑色。这种颜色属性被用来确保树的某些关键性质,...
红黑树(Red-Black Tree)是一种自平衡二叉查找树,由计算机科学家鲁道夫·贝尔在1978年提出。它在保持二叉查找树特性的同时,通过引入颜色属性来确保树的平衡,从而提高数据操作的效率。在C++中实现红黑树,通常...
红黑树(Red-Black Tree)是二叉搜索树(Binary Search Tree)的一种改进。我们知道二叉搜索树在最坏的情况下可能会变成一个链表(当所有节点按从小到大的顺序依次插入后)。而红黑树在每一次插入或删除节点 之后...
这一版代码个人认为99.99%正确,本人使用些结构及算法用于实现嵌入式迅雷Server的任务管理。此代码经本人学习研究之后从C语言版BT源代码中的宏定义式代码中分离出来,并做成一...希望对需要学习红黑树的人有帮助。
每种情况都需要精心设计的算法来重新平衡树。删除后可能需要通过颜色翻转和旋转来维护红黑树的性质。 查询操作: 红黑树的查询效率与AVL树类似,都是O(log n),因为其保持了大致平衡的特性。查询过程与普通二叉查找...
"红黑树的代码实现" 红黑树是一种自平衡的二叉查找树,它具有良好的查找、插入和删除性能。红黑树的代码实现是使用C++语言编写的,使用模板实现,可以对任意类型的数据进行处理。 红黑树的节点结构体定义为: ```...
红黑树(Red-Black Tree)是一种自平衡二叉查找树,由计算机科学家Rudolf Bayer在1972年提出。它在保持二叉查找树特性的同时,通过额外的颜色属性实现了高效的插入、删除和查找操作。红黑树的每个节点都带有颜色属性...
2. 自平衡:红黑树是一种自平衡的二叉查找树,可以自动地平衡树的高度,避免树的高度变得太高。 3. 可扩展性:红黑树可以扩展到非常大的规模,满足大规模数据存储的需要。 红黑树在Linux虚拟内存区域管理中的应用...
红黑树(Red-Black Tree)是一种自平衡的二叉查找树,由计算机科学家Rudolf Bayer在1972年提出。它在保持二叉查找树特性的同时,通过引入颜色属性来确保树的平衡,从而提高数据操作的效率。在Java中,红黑树被广泛...
红黑树。用法默认树期望键为int类型。 import ( "fmt" rbt "github.com/erriapo/redblacktree")func main () { t := rbt . NewTree () t . Put ( 7 , "payload7" ) t . Put ( 3 , "payload3" ) t . Put ( 1 , ...
红黑树(Red-Black Tree)是一种自平衡二叉查找树,由Rudolf Bayer在1972年提出,它的每个节点都带有颜色属性,可以是红色或黑色。这种数据结构在计算机科学中有着广泛的应用,特别是在实现关联数组、数据库索引、...