随笔分类 -  数据结构与算法

一些数据结构以及算法的实现,分析,描述等。
摘要:B树是一种多路平衡树,我根据《算法导论》中的算法描述实现了C++版本的BTree。关于BTree的各种属性看这里吧,还有别人的实现版本,看这里。我记得书中并没有给出删除的算法,这个部分我是根据书中的描述自己实现的。完成后自己进行过简单的测试,好像没有什么问题。总共是两个文件BTree.h和Test.cpp,BTree的实现在BTree.h文件中。Test.cpp是测试案例。具体代码如下: 1 #ifndef __BTREE_H__ 2 #define __BTREE_H__ 3 4 #include <iostream> 5 6 typedef struct _tagBT... 阅读全文
posted @ 2013-03-04 14:17 kiven.li 阅读(1762) 评论(0) 推荐(0)
摘要:平衡二叉树是一个重要的数据结构,它有很均衡的插入、删除以及查询性能(时间复杂度都是O(logn))。Linux2.4以前的内核中,虚拟内存管理中用的容器就是AVL Tree,之后的版本都改成了RBTree即红黑树。AVL Tree对平衡的要求是比较严格的,它要求左右子数之间的长度差不能大于1,也正由于它的严格导致了AVL Tree的统计性能没有RBTree好。AVL Tree在插入或者删除节点时候出现不平衡情况,根据具体情况进行一次或者多次单旋或者双旋就可以使整棵树达到平衡。具体的旋转规则看这里,删除节点的算法看这里。下面是我根据AVL树的规则用C++实现的代码: 1 #ifndef ... 阅读全文
posted @ 2013-03-01 14:22 kiven.li 阅读(1689) 评论(0) 推荐(0)
摘要:红黑树是一种有序的平衡二叉树,STL中的map和set容器的底层实现就是红黑树,在《STL源码剖析》中有另一种实现方式。不过STL中的实现相对来说晦涩难懂,而《算法导论》中的算法则比较清晰易懂。这里的这份实现就是《算法导论》中STL算法的一种C++实现。关于红色树的特性以及规则这里还有这里都有详细描述。下面就是我的实现代码: 1 #ifndef __RBTREE_H__ 2 #define __RBTREE_H__ 3 4 #include <iostream> 5 const int RED = 0; 6 const int BLACK = 1;... 阅读全文
posted @ 2013-02-28 11:48 kiven.li 阅读(2533) 评论(6) 推荐(1)