只實現了插入、查詢演算法,未實現刪除演算法。
#include #include #include #define btreekey char
#define t 2 //minmum degree
#define true 1
#define false 0
struct btree
;struct btreenode
;struct btreeresult
;void btreecreate(struct btree * tree)
struct btreenode * btreeread(struct btreenode * node, int subtreeindex)
struct btreeresult btreesearch(struct btreenode * node, btreekey k)
; //todo:optimize
return res;
}else if(node->bleaf)
;return res;
}else
struct btreeresult res=;
return res;
}//subtreeindex 滿節點的索引位置
void btreesplitchild(btreenode * panode, int subtreeindex)
//將fullnode中後半部分的子節點賦給newnode
if(!fullnode->bleaf)
}fullnode->n = t - 1;
//父節點subtreeindex之後的節點 向後移動
for(int j=panode->n; j>subtreeindex; j++)
panode->subtree[subtreeindex+1] = newnode; //將新生成的子節點填入父節點中
for(int j=panode->n-1; jkeys[j+1] = panode->keys[j];
}panode->keys[subtreeindex] = fullnode->keys[t-1];
panode->n++;
//diskwrite(fullnode)
//diskwrite(newnode)
//diskwrite(panode)
}void btreeinsertnonfull(struct btreenode * node, btreekey k)
node->keys[i+1] = k;
node->n++;
//diskwrite(node)
}else
btreeinsertnonfull(node->subtree[i], k);
}}void btreeinsert(struct btree * tree, btreekey k)
else
}void printtree(int kind, btreenode * proot); //列印樹的關鍵字
int main()
///#include#include#includeusing namespace std;
/* * 1 means integer
* 2 means character
*///printtree from
void printtree(int kind, btreenode * proot) //列印樹的關鍵字
cout << "]";
if(!temp->bleaf)
for(int i = 0;i n+1;i++)
nextlevel.push(temp->subtree[i]);
}cout << endl;
depth++;
myqueue = nextlevel;
}}
輸出結果
c btree
depth : 0
[h ]
depth : 1
[c f ][n t ]
depth : 2
[a ][d e ][g ][k l m ][q ][w z ]
演算法導論第三版習題5 2
正好僱傭一次說明第一次僱傭的就是所有應聘者中最好的,所以概率為1n 正好僱傭 n 次說明所有應聘者按優秀從低到高依次出現,第一位是最差的,概率為1n 第二位其次,概率為1n 1,所以整體概率為1n 正好僱傭兩次,說明第乙個應聘者不是最好的,概率為n 1n,第二個應聘者是最好的,概率為1n 1,所以概...
演算法導論第三版習題5 3
在進入迴圈前,先將在整個陣列中隨機選擇乙個數至於a 1 即可 permute in place a 1 n a.length 2 swap a 1 with a random 1,n 3 for i 2 to n 4 swap a i with a random i,n 第二步其概率為1n 後面一樣...
演算法導論第三版習題6 3
a a.leng th 9 故從i a.l engt h 2 4開始呼叫max heapify a,i a 4 9 8 故交換a 4 和a 8 得到新的序列a1 b 接下來呼叫max heapify a,3 a 7 3 6 故交換a 3 和a 6 得到a2 c 第三步呼叫max heapify a,...