一、b_樹的基本結構
//定義的b_樹的儲存結構的節點的結構
typedef struct btnodebitreenode;
二、b_樹的增刪改查
原始碼:
/**
*b-樹
*@author 菜鳥
*@version 2014.7.9
*/#include #include #include #include #define max 3 //max = m-1 m 為該樹結構的階
#define min 0 //min = m/2-1
using namespace std;
typedef int keytype;
int count1 = 0;
int tag1 = 0;
//定義的b_樹的儲存結構的節點的結構
typedef struct btnodebitreenode;
//定義查詢的指標變數的結構體
typedef structsernode;//查詢型別
void bitreeinsert(bitreenode*,sernode *,keytype);
void bitreeoutput(bitreenode*,int);
void operation(bitreenode*,sernode *);
bitreenode* bitreenewnode();
/***查詢結構體的初始化o
*@param sernode *p 表示查詢指標的位址
*@return 無
*/void sernodeinitiate(sernode *p)
cout<<"節點初始化成功!"bitreeoutput(b,i+1);//輸出
if(b->ptr[i+1] != null)
}}/***對乙個節點的掃瞄
*@param sernode *s 表示傳入該結構的空間位址
*@param bitreenode *destination表示要掃瞄的目標
*@param keytype num表示目標資料
*@return 無
*/void getsernodeinformation(bitreenode *destination,sernode *s,keytype num)else
if(num > p->key[s->pos]&&num < p->key[s->pos+1])
if(s->pos > p->keynum)else if(p1->ptr[p->pos] != null)else if(p1->ptr[p->pos] == null)else if(p1->ptr[p->pos-1] == null)else
}cout<<"ser->pos="= max&&p!=null )
acceptnode[1]->parent = p;
int i = 1;
while(i < max-max/2)
acceptnode[2]->parent = p;
count1--;
free(s);
cout<<"**完成!"= max)else
int i = 1;
while(s->key[ser->pos]< s->key[max])
cout<<"**完成!"pos的值
bitreeinsert(acceptnode[0],ser,s->key[max/2+1]);//對新建立的根節點進行插入
acceptnode[0]->parent = null;
for(int i = 1;i >=0 ;i--)
//此時我們需要向這兩個空的節點中賦值
sernodeinitiate(ser);
while(ser->pos < max/2+1)
acceptnode[1]->parent = acceptnode[0];
int i = 1;
while(i < max-max/2)
acceptnode[2]->parent = acceptnode[0];
count1--;
free(s);
return acceptnode[0];//此時返回根節點
}/*else if(p != null&&ser->pos< s->keynum)else
acceptnode[1]->ptr[ser->pos-1] = s->ptr[ser->pos-1];
int i = 1;
while(s->key[ser->pos]< s->key[max])
acceptnode[2]->ptr[i-1] = s->ptr[ser->pos-1];
cout<<"**完成!"p1 = b;
char c = 0;
//此時根節點為空的情況
if(p1->keynum == 0)
if(p1->keynum == 1)
if(num >= p1->key[i]&&p1->ptr[i] != null)*/
if(i+1<=p1->keynum&&num >= p1->key[i]&&num<=p1->key[i+1])else if(num >= p1->key[p1->keynum]&&p1->ptr[p1->keynum]!= null)else if(i == 1&&num key[i]&&p1->ptr[i-1] != null)else
}elseelse
}//這時已經獲取到了位址,那麼我們需要進行插入操作
//插入操作
cout<<"-------------------"p1->key[i] = num;
p1->keynum = p1->keynum+1;
cout<<"插入成功!"i ;j--)
if(count1<=min)else if(c == 'n'|| c == 'n')}}
}}
}else if(p1->keynum >= max)else
} cout<<"p->keynum="p->keynum--;
count1--;
cout<<"刪除成功!--"keynum;i++)else
}if(num >=p->parent->key[a])else
free(p);
count1--;
cout<<"刪除成功!---"}
if(p->parent == null)else}}
cout<<"在父節點中的位置a="ptr[b]!= null)else if(p->ptr[b]->keynum >1&&p->ptr[b-1]->keynum ==1)else
}else if(p->ptr[b-1]== null&&p->ptr[b]!= null)else if(p->ptr[b-1]!= null&&p->ptr[b]== null)
}cout<<"刪除成功!"input;
switch(input)else if(c == 'n'||c == 'n')else
}else
case 2:cout<<"請輸入要查詢的元素:";cin>>num;bitreeserch(root,s,num);operation(root,s);break;
case 3:cout<<"請輸入要刪除的元素:";cin>>num;if(root == null)
}int main()else
bitreenode *root = null;
sernodeinitiate(p);
root = createroot(p);
system("pause");
return 0;
}
索引之B樹 B 樹 B 樹 B 樹
原文索引之b樹 b 樹 b 樹 b 樹 b 樹即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left 和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中...
索引之B樹 B 樹 B 樹 B 樹詳解
索引之b樹 b 樹 b 樹 b 樹 b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則...
多路查詢樹 B數 B 樹 B 樹 原理
1 二叉樹需要載入到記憶體的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多 此如1億 就存在如下問題 2 問題1 在構建二叉樹時,需要多次進行 o操作海量資料存在資料庫或檔案中 節點海量,構建二叉樹時,速度有影響 3 問題2 節點海量,也會造成二叉樹的高度很大,會降低操作速度 1 在二...