⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmxbtree 类使用说明.txt

📁 CMXBTree 的主要作用是在内存中建立一棵B+树
💻 TXT
字号:
            CMXBTree 类使用说明
=============================================================

1、概述
-------
    CMXBTree 的主要作用是在内存中建立一棵B+树,主要针对数据
量较大,查询频繁的数据,例如话单分离中局向的查询、配置文件
中的设置查询等。总之,CMXBTree 可被视作一个在内存中的数据库
使用。其特点是:短小精悍。


2、使用 CMXBTree 类
-------------------
    CMXBTree 被定义为一个模板(C++ Template),定义格式是:
    CMXBTree< RECTYPE > bt;
    
    例如,如果要想 定义一个 int 的 B+Tree 可写作:
    CMXBTree< int > btInt;
    
    注意:模板中的 RECTYPE 必须支持两个操作符:
        小于(<) 和 赋值(=)


3、CMXBTree 所支持的方法
------------------------

[1]、增加树中的元素
    int InsertKey( RECTYPE &Key ); 
    入口参数是要插入的 元素 的引用,主要目的是为了`快`。
    返回值:
    0   表示正常
    -1  表示 B+Tree 出错,即 CMXBTree 有 BUG
    -2  申请不到内存,内存不足
    
[2]、删除树中的元素
    int DeleteKey( RECTYPE &Key );
    入口参数是要删除的 元素 的引用,主要目的是为了`快`。
    返回值:
    1   表示要删除的 Key 不在树中
    0   表示正常删除
    -1  表示 B+Tree 出错,即 CMXBTree 有 BUG

[3]、在树中搜索某个 Key
    RECTYPE *SearchKey( RECTYPE & Key, 
        RECTYPE **pLessThan = NULL, 
        RECTYPE **pGreaterThan = NULL 
        );
    入口参数:
    Key:要查找的 Key 的引用
    pLessThan: 当该参数不为 NULL 时,不管能不能在树中找到Key
                它返回比 Key 小的元素中最大的一个元素的指针,如果
                这个指针是 NULL,表示 Key 在树中的值最小,没有
                别的元素比它小。

    pGreaterThan: 当该参数不为 NULL 时,不管能不能在树中找到Key
                它返回比 Key 大的元素中最小的一个元素的指针,如果
                这个指针是 NULL,表示 Key 在树中的值最大,没有
                别的元素比它大。                

    返回值:
        如果树中存在于 Key 的值相等的元素,则返回该元素的指针,
        否则,返回 NULL        

[4]、继续搜索具有同样 Key 的元素(与SearchKey配合使用)
        RECTYPE *SearchNextKey( void );
        
    当我们使用 SearchKey 查找到一个满足条件的元素后,可以用该方法
    继续搜索下一个符合同样条件的元素。由于采用了队列,该方法的返回
    将`飞快`。
    返回值:与 SearchKey 相同


[5]、无条件返回树中的第一个元素(也就是树中最小的元素)
    RECTYPE *GetFirstKey( void );
    返回值:指向树中的第一个元素的指针,如果是 NULL,表示该树已空。

[6]、无条件返回树中的下一个元素(与 GetFirstKey 配合使用)
    RECTYPE *GetNextKey( void );
    这个方法所返回的元素一定是从小到大排列的。
    返回值:指向树中的第一个元素的指针,如果是 NULL,表示该树已空。

[7]、把数砍掉
    int DestroyTree( void )
    把数连根拔起、释放内存
    返回值
    0   表示正常
    -1  表示 B+Tree 出错,即 CMXBTree 有 BUG


4、使用例子
-----------

    //先定义一棵树,元素类型是:CMXString
    //注:CMXString 是我定义的一个专门处理字符串的类
    //    它支持 小于操作符(<) 和 赋值操作符(=)
    CMXBTree<CMXString> bt;
    
    //定义需要的变量及指针
    CMXString str2, str, *pStr, *pStr1, *pStr2;

    //这是局向
    char* pszStr = " 8517 8519  8610 8611 8615 8620 8625 8630 8635 "
                    "8640 8645 8650 8655 8660 8665 8540 8541 8542 "
                    "8670 8672 8675 8677 8682 8684 8686 8621 "
                    "8690 8691 8692 8693 8694 8697 85186";
    str = pszStr;
    str2 = str.GetFirstToken(" "); //以空格为分隔符,把 pszStr 一个个地切开
    while( !str2.IsEmpty() )  //如果还没有到字符串的末尾
    {
        if( str2.Length() > 0 ) //如果两个空格间有东西,
            bt.InsertKey( str2 ); //把 str2 插入
        str2 = str.GetNextToken( ); //取下一个局向
    }   
    
    //来到这里表示树已建成
    //接下来,我们把树的所有元素按照从小到大的顺序排列出来
    pStr = bt.GetFirstKey();
    while( pStr )
    {
        printf("[%s]", pStr->C_str() );
        pStr = bt.GetNextKey();
    }

    printf("\n");
    
    //看看字符串 "85186" 是否存在
    str2 = "85186";
    pStr = bt.SearchKey( str2, &pStr1, &pStr2 );
    if( pStr )
        printf("[%s] is in the tree\n", *pStr );
    else
        printf("Cannot find [%s]\n", *pStr );

    //看看电话号码 8677123 是否在这个局中
    
    str2 = "8677123"
    pStr = bt.SearchKey( str2, &pStr1, &pStr2 );
    if( pStr1 ) 
    {
        if( pStr1 && str2.FindFirst( *pStr1 ) == str2 ) //*pStr1 应该就是 8667
            printf("Yes!\n");
    }
    //如果 pStr1 为 NULL ,表示 str2 比所有的局向数据小,
    //则表示 str2 一定不在局向内
    
这段代码的输出结果将是:
[8517][85186][8519][8540][8541][8542][8610][8611][8615][8620][8621][8625][8630][
8635][8640][8645][8650][8655][8660][8665][8670][8672][8675][8677][8682][8684][86
86][8690][8691][8692][8693][8694][8697]
[85186] is in the tree
Yes!    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -