#include #include #define t 3
typedef struct bnodetype
bnode,*pbnode;
typedef struct
btree,*pbtree;
typedef struct
stype,*pstype;
pbnode allocatenode()
void b_tree_create(pbtree t)
void b_tree_split_child(pbnode x,int i)
if(!y->leaf) }
y->n=t-1;
for(int j=x->n+1;j>=i+1;j--)
x->c[i+1]=z;
for(int j=x->n;j>=i;j--)
x->key[i]=y->key[t];
x->n++;
}void b_tree_insert_nonfull(pbnode x, char k)
x->key[i+1]=k;
x->n++;
} else
i++;
if(x->c[i]->n==2*t-1)
b_tree_insert_nonfull(x->c[i],k); }}
void b_tree_insert(pbtree t,char k)
else
b_tree_insert_nonfull(r,k);
}pstype b_tree_search(pbnode x,char k)
else if(x->leaf)
return null;
else
return b_tree_search(x->c[i],k);
}//這個前驅函式假設x為非葉節點,包含葉節點的前驅函式需要用到父節點,這裡用不到所以沒寫
char predecessor(pbnode x,int i)
//這個後繼函式假設x為非葉節點,包含葉節點的後繼函式需要用到父節點,這裡用不到所以沒寫
char successor(pbnode x,int i)
void b_tree_delete(pbnode x,char k,pbtree t)
x->n--;
} //case 2
else
//case 2.b
else if(z->n>=t)
//case 2.c
else
//處理y子節點
j=y->n+1;
for(int m=1;m<=z->n+1;m++)
//處理y中key的個數
y->n+=z->n+1;
//處理x中key陣列
for(int m=i;mn;m++)
x->key[m]=x->key[m+1];
//處理x子節點
for(int m=i+1;mn+1;m++)
x->c[m]=x->c[m+1];
//處理x中key的個數
x->n--;
if(x->n==0)
free(z);
b_tree_delete(y,k,t);
}} }
//case 3
else
y->key[1]=xc;
for(int m=y->n+1;m>=1;m--)
y->c[1]=z->c[z->n+1];
y->n++;
//處理z
z->n--;
}else if(in+1 && x->c[i+1] && x->c[i+1]->n>=t)
for(int m=1;mn+1;m++)
z->n--;
}//case 3.b
else
y->key[t]=x->key[i-1];
//處理y子節點
for(int m=y->n+1;m>=1;m--)
y->c[m+t]=y->c[m];
for(int m=1;m<=z->n+1;m++)
//處理y中key的個數
y->n+=z->n+1;
//處理x中key陣列
for(int m=i-1;mn;m++)
x->key[m]=x->key[m+1];
//處理x子節點
for(int m=i-1;mn+1;m++)
x->c[m]=x->c[m+1];
//處理x中key的個數
x->n--;
if(x->n==0)
free(z);
}else if(in+1 && x->c[i+1] && x->c[i+1]->nc[i+1];
//處理y中key陣列
y->key[t]=x->key[i];
for(int m=1;m<=z->n;m++)
//處理y子節點
for(int m=1;m<=z->n+1;m++)
//處理y中key的個數
y->n+=z->n+1;
//處理x中key陣列
for(int m=i;mn;m++)
x->key[m]=x->key[m+1];
//處理x子節點
for(int m=i+1;mn+1;m++)
x->c[m]=x->c[m+1];
//處理x中key的個數
x->n--;
if(x->n==0)
free(z);}}
} b_tree_delete(y,k,t); }
}void printnode(pbnode x)
printf("\n");
}pbtree inittree()
void main()
演算法導論 B樹
這是為磁碟儲存而專門設計的一類平衡搜尋樹。由於磁碟訪問相對訪存極慢,因此度量b樹的效能,考慮 a.動態集合操作消耗的計算時間 b.執行了多少次的磁碟訪問。對每個b樹操作,磁碟訪問的次數隨著b樹的高度增加。b tree定義 第1.每個節點x有 a.x.n儲存節點x的關鍵字個數。b.x.n個關鍵字不嚴格...
《演算法導論》筆記 B樹
演算法 cc c 資料結構 b樹是平衡樹的一種,主要用於操作儲存在磁碟等二級儲存裝置上的大量資料。相比起記憶體 主存 來說,磁碟操作的速度非常慢 慢幾個數量級 所以涉及到儲存在磁碟的資料的時候,儘量減少磁碟的讀取和寫入操作對於提高操作速度是非常重要的。b樹就是針對這個特點進行設計以滿足相應要求的。b...
演算法導論B樹學習筆記
定義就不重複說明了 b樹與b 樹的不同是,b 樹中非葉子節點的節點也會出現在葉子節點中 b樹要求至少t 1,至多2t 1 b樹一 插入 1 關於高度的定理 h l ogtn 1 2h leqslant log t frac h logt 2n 1 2 操作 抽象出來就是插入到某個節點,滿了之後從中間...