發布一個B-樹的代碼
代碼下載:http://bluedog.download.csdn.net
B-mso-ascii-font-family:">樹網上的代碼很象不是很多,關於它的原理我覺得沒有必要要談了,書上網上太多了。這裡我花了幾天的時間寫了一個,大家覺得有用的話就用吧,已經進行大量的測試,應該沒有什麼太大問題了,它由兩個檔案定義:BinaryMinusTree.h ">和 BinaryMinusTree.inc">,你只要包含BinaryMinusTree.h">就好了。
#include
"BinaryMinusTree.h"
這兩個檔案定義了幾個類,不過你唯一需要瞭解的只是CBinaryMinusTree ">這個類,它的定義如下:
" lang="EN-US">template<typename TK,typename
TV,size_t THD=10>
class9.0pt;font-family:" lang="EN-US"> BinaryMinusTreeKey
TK mso-ascii-font-family:">是 Key">值的類型,
TVmso-ascii-font-family:">是 Val ">值的類型,
THD mso-ascii-font-family:">是節點度的一半,意思是如果你一個節點的度是21">即有font-family:" lang="EN-US">21個font-family:" lang="EN-US">KEY值,那麼font-family:" lang="EN-US">THD就應為font-family:" lang="EN-US">10
" lang="EN-US">
mso-ascii-font-family:">它有幾個方法:
" lang="EN-US">bool Add(TK
key,TV val); //9.0pt;font-family:宋體;mso-ascii-font-family:">增加一個Keyfont-family:宋體;mso-ascii-font-family:">和值
" lang="EN-US">bool
Remove(TK key);
//font-family:宋體;mso-ascii-font-family:">刪除一個Key
" lang="EN-US">void
Print();yes"> //宋體;mso-ascii-font-family:">列印樹
void9.0pt;font-family:" lang="EN-US"> Clear();
//font-family:宋體;mso-ascii-font-family:">刪除所有資料
" lang="EN-US">
mso-ascii-font-family:">還有幾個公用成員:
" lang="EN-US">LPBMTN Root;yes"> //mso-ascii-font-family:">根節點
" lang="EN-US">size_t KeyCount; //關鍵字數量
" lang="EN-US">size_t Level; //樹層數
size_t NodeCount; //樹節點數
沒有提供其它功能,有其它需要的朋友自已完善它吧。呵呵。
附記:其實B-樹的原理很簡單,書上提供的演算法描述也很清楚,不過真正要寫好它還是有點難度,很多要注意的地方,一不小心樹就掛了。