亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cpp1.cpp

?? 數據庫的應用
?? CPP
字號:



/* BPlusTree.h
B+樹定義文件,本程序實行一個簡單的B+樹
Definition (from http://www.seanster.com/BplusTree/BplusTree.html): 
(1) A B+ tree of order v consists of a root, internal nodes and leaves. 
(2) The root my be either leaf or node with two or more children. 
(3) Internal nodes contain between v and 2v keys, and a node with k keys has k + 1 children. 
(4) Leaves are always on the same level. 
(5) If a leaf is a primary index, it consists of a bucket of records, sorted by search key. If it is a secondary index, it will have many short records consisting of a key and a pointer to the actual record.
(1) 一個v階的B+樹由根結點、內部結點和葉子結點組成。
(2) 根結點可以是葉子結點,也可以是有兩個或更多子樹的內部結點。
(3) 每個內部結點包含v - 2v個鍵。如果一個內部結點包含k個鍵,則有且只有k+1個指向子樹的指針。
(4) 葉子結點總是在樹的同一層上。
(5) 如果葉子結點是主索引,它包含一組按鍵值排序的記錄;如果葉子結點是從索引,它包含一組短記錄,每個短記錄包含一個鍵以及指向實際記錄的指針。
(6) 內部結點的鍵值和葉子結點的數據值都是從小到大排序的。
(7) 在中間結點中,每個鍵的左子樹中的所有的鍵都小于這個鍵,每個鍵的右子樹中的所有的鍵都大于等于這個鍵。
*/

/* B+ 樹的階,即內部結點中鍵的最小數目v。 
   也有些人把階定義為內部結點中鍵的最大數目,即2v。 
   一般而言,葉子結點中最大數據個數和內部結點中最大鍵個數是一樣的,也是2v。(我想這樣做的目的是為了把內部結點和葉子結點統一到同一個結構中吧)
*/ 
#define ORDER_V 2    /* 為簡單起見,把v固定為2,實際的B+樹v值應該是可配的 */
#define MAXNUM_KEY (ORDER_V * 2)    /* 內部結點中最多鍵個數,為2v */
#define MAXNUM_POINTER (MAXNUM_KEY + 1)    /* 內部結點中最多指向子樹的指針個數,為2v */
#define MAXNUM_DATA (ORDER_V * 2)    /* 葉子結點中最多數據個數,為2v */
/* 鍵值的類型*/
typedef int KEY_TYPE;    /* 為簡單起見,定義為int類型,實際的B+樹鍵值類型應該是可配的 */
/*備注: 為簡單起見,葉子結點的數據也只存儲鍵值*/
/* 結點類型 */
enum NODE_TYPE
{
NODE_TYPE_ROOT     = 1,    // 根結點
NODE_TYPE_INTERNAL = 2,    // 內部結點
NODE_TYPE_LEAF     = 3,    // 葉子結點
};
#define NULL 0
#define INVALID 0
#define FLAG_LEFT 1
#define FLAG_RIGHT 2
/* 結點數據結構,為內部結點和葉子結點的父類 */
class CNode
{
public:
    CNode();
    virtual ~CNode();
    
    //獲取和設置結點類型
    NODE_TYPE GetType() { return m_Type; }
    void SetType(NODE_TYPE type) {m_Type = type;}
    // 獲取和設置有效數據個數
    int GetCount() { return m_Count;}
    void SetCount(int i) { m_Count = i; }
    // 獲取和設置某個元素,對中間結點指鍵,對葉子結點指數據
    virtual KEY_TYPE GetElement(int i) {return 0;}
    virtual void SetElement(int i, KEY_TYPE value) { }
    
    // 獲取和設置某個指針,對中間結點指指針,對葉子結點無意義
    virtual CNode* GetPointer(int i) {return NULL;}
    virtual void SetPointer(int i, CNode* pointer) { }
    // 獲取和設置父結點
    CNode* GetFather() { return m_pFather;}
    void SetFather(CNode* father) { m_pFather = father; }
    // 獲取一個最近的兄弟結點
    CNode* GetBrother(int& flag);
    // 刪除結點
    void DeleteChildren();
protected:
    
    NODE_TYPE m_Type;    // 結點類型,取值為NODE_TYPE類型
    int m_Count;    // 有效數據個數,對中間結點指鍵個數,對葉子結點指數據個數
    CNode* m_pFather;     // 指向父結點的指針,標準B+樹中并沒有該指針,加上是為了更快地實現結點分裂和旋轉等操作
};
/* 內部結點數據結構 */
class CInternalNode : public CNode
{
public:
    CInternalNode();
    virtual ~CInternalNode();
    // 獲取和設置鍵值,對用戶來說,數字從1開始
    KEY_TYPE GetElement(int i) 
    { 
        if ((i > 0 ) && (i <= MAXNUM_KEY))
        {
            return m_Keys[i - 1];
        }
        else
        {
            return INVALID;
        }
    }
    void SetElement(int i, KEY_TYPE key)
    {
        if ((i > 0 ) && (i <= MAXNUM_KEY))
        {
            m_Keys[i - 1] = key;
        }
    }
    // 獲取和設置指針,對用戶來說,數字從1開始
    CNode* GetPointer(int i) 
    { 
        if ((i > 0 ) && (i <= MAXNUM_POINTER))
        {
            return m_Pointers[i - 1];
        }
        else
        {
            return NULL;
        }
    }
    void SetPointer(int i, CNode* pointer)
    {
        if ((i > 0 ) && (i <= MAXNUM_POINTER))
        {
            m_Pointers[i - 1] = pointer;
        }
    }
    // 插入鍵
    bool Insert(KEY_TYPE value, CNode* pNode);
    // 刪除鍵
    bool Delete(KEY_TYPE value);
    // 分裂結點
    KEY_TYPE Split(CInternalNode* pNode, KEY_TYPE key);
    // 結合結點
    bool Combine(CNode* pNode);
    // 從另一結點移一個元素到本結點
    bool MoveOneElement(CNode* pNode);
protected:
    KEY_TYPE m_Keys[MAXNUM_KEY];           // 鍵數組
    CNode* m_Pointers[MAXNUM_POINTER];     // 指針數組
};
/* 葉子結點數據結構 */
class CLeafNode : public CNode
{
public:
    CLeafNode();
    virtual ~CLeafNode();
    // 獲取和設置數據
    KEY_TYPE GetElement(int i)
    {
        if ((i > 0 ) && (i <= MAXNUM_DATA))
        {
            return m_Datas[i - 1];
        }
        else
        {
            return INVALID;
        }
    }
    void SetElement(int i, KEY_TYPE data)
    {
        if ((i > 0 ) && (i <= MAXNUM_DATA))
        {
            m_Datas[i - 1] = data;
        }
    }
    // 獲取和設置指針,對葉子結點無意義,只是實行父類的虛函數
    CNode* GetPointer(int i) 
    { 
        return NULL;
    }
    
    // 插入數據
    bool Insert(KEY_TYPE value);
    // 刪除數據
    bool Delete(KEY_TYPE value);
    // 分裂結點
    KEY_TYPE Split(CNode* pNode);
    // 結合結點
    bool Combine(CNode* pNode);
public:
    // 以下兩個變量用于實現雙向鏈表
    CLeafNode* m_pPrevNode;                 // 前一個結點 
    CLeafNode* m_pNextNode;                 // 后一個結點 
    
protected:
    KEY_TYPE m_Datas[MAXNUM_DATA];    // 數據數組
};
/* B+樹數據結構 */ 
class BPlusTree
{
public:
   
    BPlusTree();
    virtual ~BPlusTree();
    // 查找指定的數據
    bool Search(KEY_TYPE data, char* sPath);
    // 插入指定的數據
    bool Insert(KEY_TYPE data);
    // 刪除指定的數據
    bool Delete(KEY_TYPE data);
    // 清除樹
    void ClearTree();
    // 打印樹
    void PrintTree();
    // 旋轉樹
    BPlusTree* RotateTree();
    // 檢查樹是否滿足B+樹的定義
    bool CheckTree();
    void PrintNode(CNode* pNode);
    // 遞歸檢查結點及其子樹是否滿足B+樹的定義
    bool CheckNode(CNode* pNode);
    // 獲取和設置根結點
    CNode* GetRoot()
    {
        return m_Root;
    }
    void SetRoot(CNode* root)
    {
        m_Root = root;
    }
    // 獲取和設置深度
    int GetDepth()
    {
        return m_Depth;
    }
    void SetDepth(int depth)
    {
        m_Depth = depth;
    }
    
    // 深度加一
    void IncDepth()
    {
        m_Depth = m_Depth + 1;
    }
    // 深度減一
    void DecDepth()
    {
        if (m_Depth > 0)
        {
            m_Depth = m_Depth - 1;
        }
    }
public:
    // 以下兩個變量用于實現雙向鏈表
    CLeafNode* m_pLeafHead;                 // 頭結點 
    CLeafNode* m_pLeafTail;                   // 尾結點
protected:
    // 為插入而查找葉子結點
    CLeafNode* SearchLeafNode(KEY_TYPE data);
    //插入鍵到中間結點
    bool InsertInternalNode(CInternalNode* pNode, KEY_TYPE key, CNode* pRightSon);
    // 在中間結點中刪除鍵
    bool DeleteInternalNode(CInternalNode* pNode, KEY_TYPE key);
    
    CNode* m_Root;    // 根結點
    int m_Depth;      // 樹的深度
};
/* end of BPlusTree.h */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产伦一区二区三区观看方式| 成人黄色综合网站| 欧美日韩国产首页| 亚洲黄色在线视频| 91久久免费观看| 亚洲欧美国产三级| 麻豆一区二区三| 欧美一级黄色录像| 美女国产一区二区三区| 538在线一区二区精品国产| 一区二区三区加勒比av| 国产精品一二三四五| 久久久久9999亚洲精品| 国产精品一级片在线观看| 精品久久久久久无| 美国毛片一区二区| 26uuu欧美日本| 国产一区视频在线看| 91精品国产综合久久久蜜臀粉嫩| 丝瓜av网站精品一区二区| 日韩午夜小视频| 国产精品99久久久久久久vr| 国产欧美视频在线观看| 波多野结衣亚洲一区| 亚洲美女屁股眼交| 欧美一区二区在线看| 精品亚洲porn| 中文av一区二区| 91久久精品一区二区二区| 亚洲va国产天堂va久久en| 欧美一区二区二区| 国产激情精品久久久第一区二区 | 久久久久久久久久看片| 粉嫩av亚洲一区二区图片| 亚洲人一二三区| 高清不卡在线观看| 亚洲一区二区三区在线看| 91精品综合久久久久久| 视频一区欧美日韩| 国产日产精品一区| 欧美日韩三级视频| 国产一本一道久久香蕉| 日韩码欧中文字| 欧美久久久影院| 国产**成人网毛片九色| 亚洲综合偷拍欧美一区色| 精品国产乱码久久久久久闺蜜| 国精产品一区一区三区mba视频 | 99re热视频精品| 日产国产高清一区二区三区| 日韩写真欧美这视频| 色吧成人激情小说| 国产成人精品网址| 天使萌一区二区三区免费观看| 国产欧美一区二区三区沐欲| 欧洲一区二区三区免费视频| 麻豆91免费看| 最好看的中文字幕久久| 91精品在线一区二区| av电影天堂一区二区在线观看| 亚洲在线视频一区| 国产精品久久午夜夜伦鲁鲁| 欧美一区二区视频网站| 99精品视频中文字幕| 国产在线不卡一区| 日日夜夜免费精品| 一区二区三区在线视频播放 | 亚洲成人1区2区| 中文字幕在线播放不卡一区| 日韩一区二区三区高清免费看看| 色综合中文字幕国产 | 99免费精品在线| 国产精品性做久久久久久| 婷婷丁香激情综合| 亚洲在线视频免费观看| 亚洲美女精品一区| 中文字幕亚洲一区二区va在线| 欧美精品一区二区三区在线 | 午夜精品久久久久久久久久| 国产精品福利一区| 欧美极品少妇xxxxⅹ高跟鞋| 9191久久久久久久久久久| 成人蜜臀av电影| 国产成人欧美日韩在线电影| 久久99精品久久只有精品| 日本欧美肥老太交大片| 亚洲欧美一区二区三区极速播放| 国产清纯在线一区二区www| 久久综合久色欧美综合狠狠| 在线电影一区二区三区| 欧美日韩精品是欧美日韩精品| 在线视频亚洲一区| 一本色道亚洲精品aⅴ| av一区二区三区黑人| proumb性欧美在线观看| 国内精品免费**视频| 美女视频一区二区| 蜜乳av一区二区| 免费xxxx性欧美18vr| 久久精品国内一区二区三区| 青青草国产成人av片免费| 热久久国产精品| 捆绑调教一区二区三区| 亚洲成a天堂v人片| 美女性感视频久久| 激情久久久久久久久久久久久久久久| 裸体在线国模精品偷拍| 国产真实乱对白精彩久久| 国产在线精品一区二区三区不卡| 国产精品99久久久久| 97成人超碰视| 欧美日韩国产综合草草| 欧美精品v国产精品v日韩精品| 日韩一区二区精品在线观看| 日韩亚洲欧美成人一区| 欧美大黄免费观看| 精品国产免费一区二区三区四区| 久久色视频免费观看| 国产精品理论在线观看| 亚洲综合av网| 久久精品99国产国产精| 国产成人在线视频网站| 99v久久综合狠狠综合久久| 91国偷自产一区二区使用方法| 欧美精选在线播放| 精品成人一区二区| 国产精品久久久久久久久免费桃花 | 欧美一级黄色录像| 国产亚洲成av人在线观看导航| 综合久久国产九一剧情麻豆| 五月激情综合婷婷| 国产精品羞羞答答xxdd| 欧美在线不卡视频| 久久综合网色—综合色88| 亚洲乱码国产乱码精品精可以看| 无码av中文一区二区三区桃花岛| 国产乱人伦精品一区二区在线观看| 成人sese在线| 欧美一区二区三区四区在线观看 | 亚洲色图一区二区三区| 婷婷综合五月天| 国产精品18久久久久久vr| 91捆绑美女网站| 久久综合色婷婷| 亚洲电影第三页| 成人视屏免费看| 日韩一区二区三区观看| ...xxx性欧美| 精品一区二区免费在线观看| 色婷婷久久一区二区三区麻豆| 欧美电影精品一区二区| 国产调教视频一区| 亚洲一区二区在线观看视频| 国产传媒一区在线| 日韩三级视频在线观看| 有坂深雪av一区二区精品| 国产精品综合久久| 欧美一区中文字幕| 亚洲人成精品久久久久久| 国产成人鲁色资源国产91色综| 337p亚洲精品色噜噜噜| 亚洲欧美另类久久久精品2019| 国产麻豆午夜三级精品| 欧美一级精品在线| 亚洲韩国一区二区三区| 国产精品一区二区三区99| 正在播放一区二区| 亚洲综合网站在线观看| 欧洲中文字幕精品| 色94色欧美sute亚洲13| 日韩限制级电影在线观看| 亚洲欧美日韩国产成人精品影院| 久久99国产精品久久99果冻传媒| 欧美美女一区二区在线观看| 亚洲精品成人在线| av中文字幕一区| 亚洲麻豆国产自偷在线| 99久久综合国产精品| 日韩毛片高清在线播放| 色哟哟在线观看一区二区三区| 最新国产精品久久精品| 91玉足脚交白嫩脚丫在线播放| 综合av第一页| 欧美写真视频网站| 日韩av一二三| 精品国产91久久久久久久妲己| 国产精品亚洲第一区在线暖暖韩国| 国产欧美精品日韩区二区麻豆天美| 不卡的av在线播放| 伊人开心综合网| 欧美精品电影在线播放| 国产一区在线不卡| 国产精品美女久久久久久久久久久 | 亚洲一区二区三区中文字幕 | 日韩精品一二三区| 日韩欧美另类在线| 国产成人免费9x9x人网站视频| 国产精品青草综合久久久久99| 色综合视频一区二区三区高清| 亚洲国产视频直播|