資源簡(jiǎn)介
數(shù)據(jù)庫實(shí)驗(yàn)B+樹,實(shí)現(xiàn)文件存儲(chǔ),并且能夠正確實(shí)現(xiàn)查找,插入,刪除功能

代碼片段和文件信息
//?BTreeAdd.cpp?
#include?“stdafx.h“
#include?“BTreeAdd.h“
void?BTreeAdd::ReadLeafNode(BTreeLeafNode*?rint?BlockNum) //從磁盤讀取節(jié)點(diǎn)
{
DBFile.seekg(BlockNum*sizeof(BTreeLeafNode)ios::beg);
DBFile.read((char*)(r)sizeof(BTreeLeafNode));
}
void?BTreeAdd::WriteLeafNode(BTreeLeafNode*?wint?BlockNum) //向磁盤寫入節(jié)點(diǎn)
{
DBFile.seekg(BlockNum*sizeof(BTreeLeafNode)ios::beg);
DBFile.write((const?char*)(w)sizeof(BTreeLeafNode));
DBFile.flush();
}
void?BTreeAdd::ReadNode(BTreeNode*?rint?BlockNum) //從磁盤讀取節(jié)點(diǎn)
{
DBFile.seekg(BlockNum*sizeof(BTreeNode)ios::beg);
DBFile.read((char*)(r)sizeof(BTreeNode));
}
void?BTreeAdd::WriteNode(BTreeNode*?wint?BlockNum) //向磁盤寫入節(jié)點(diǎn)
{
DBFile.seekg(BlockNum*sizeof(BTreeNode)ios::beg);
DBFile.write((const?char*)(w)sizeof(BTreeNode));
DBFile.flush();
}
//打印查找返回三元素節(jié)點(diǎn)函數(shù)
void?BTreeAdd::BPrintTriNode(TripleBTree?p)
{
cout<<“搜索到的值為:“<key[p.insCot].number<<“元素位置為“< cout<<“號(hào)碼名字為:“<key[p.insCot].name< BTreePrintMidNode(p.RetNode);
}
//打印中間節(jié)點(diǎn)信息
void?BTreeAdd::BTreePrintMidNode(BTreeNode*?p)
{
cout<<“元素為為:“;
for(int?i=1;i<=p->n;i++)
{
cout<key[i].number<<“??“<ChildPtr[i]<<“??“;
if(i%4==0)?cout<
}
printf(“塊號(hào)為:%d父節(jié)點(diǎn)為:%d節(jié)點(diǎn)個(gè)數(shù)為%d\n“p->BlockCotp->ParaentNodep->n);
printf(“左兄弟節(jié)點(diǎn)為:%d右兄弟為:%d\n“p->LeftBrop->RightBro);
}
//打印葉節(jié)點(diǎn)信息
void?BTreeAdd::BTreePrintLeafNode(BTreeLeafNode*?Leaf)
{
cout<<“葉節(jié)點(diǎn)為:“;
for(int?i=0;in;i++)
{
cout<key[i].number<<“??“;
if(i%5==0)?cout< }
printf(“塊號(hào)為:%d父節(jié)點(diǎn)為:%d左兄弟為%d右兄弟為%d\n元素個(gè)數(shù)為%d\n“
Leaf->BlockCotLeaf->ParaentNodeLeaf->LeftBroLeaf->RightBroLeaf->n);
}
//B+樹查找功??????能
TripleBTree?BTreeAdd::Search(const?TelNumber&?needNumber)
{
// cout<<“搜索中\(zhòng)n“;
TripleBTree?result; //返回結(jié)果
ReadNode(rootDBInfo.root); //讀出跟節(jié)點(diǎn)
BTreeNode*?p=root;
int?inscot=0; //當(dāng)節(jié)點(diǎn)不為空的時(shí)
while(p->n) //設(shè)置p節(jié)點(diǎn)的右邊界,共有有效數(shù)據(jù)為n個(gè)
{
// BTreePrintMidNode(p);//下標(biāo)從1-n,0為最小數(shù)據(jù),n+1為最大數(shù)據(jù)
p->key[p->n+1]=MAXKEY; //n //判斷該節(jié)點(diǎn)是否有關(guān)鍵字,利用二分查找
if(p->n<0)
{
exit(1);
}
if(p->key[1]>needNumber) //小于節(jié)點(diǎn)最小元素,多加這步判斷是否可以提高速度
{
inscot=0; //元素不存在
}
else?if(p->key[p->n] {
inscot=p->n; //元素不存在
}
else //元素位于節(jié)點(diǎn)內(nèi)部二分查找
{
inscot=Fine2Fen(pneedNumber.number0p->n);
}
// cout<<“查找下一個(gè)位置“<ChildPtr[inscot]< if((p->ChildPtr[inscot])<0) //如果到達(dá)ye節(jié)點(diǎn)則跳出
{
// cout<<“已經(jīng)到達(dá)葉節(jié)點(diǎn)\n“;
break;
}
//打印查找點(diǎn)的路徑信息
ReadNode(pp->ChildPtr[inscot]); //讀取當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)
}
if(p->key[inscot]==needNumber) //如果找到關(guān)鍵字
{
result.RetNode=p;
result.insCot=inscot;
result.isIn=1;
return?result;
}
else
{
result.RetNode=p; //如果沒有找到關(guān)鍵字則返回可以插入的節(jié)點(diǎn)
result.insCot=inscot+1; //可插入的位置
result.isIn=0; //搜索失敗返回可插入的位置
return?result;
}
}
//二分查找返回元素在節(jié)點(diǎn)中的位置,大于等于
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2011-06-29?17:38??數(shù)據(jù)庫實(shí)驗(yàn)2\
?????目錄???????????0??2011-06-29?17:09??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\
?????目錄???????????0??2011-06-29?17:09??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+\
?????文件?????????893??2011-05-31?16:02??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+.sln
?????文件???????14336??2011-06-29?17:09??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+.suo
?????文件????????4632??2011-06-02?12:40??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+\BTreeAdd+.vcproj
?????文件????????1411??2011-06-29?17:09??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+\BTreeAdd+.vcproj.tanlang.mobilechan.user
?????文件????????1427??2011-06-02?12:49??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+\BTreeAdd+.vcproj.WWW-17C5C65F49E.Administrator.user
?????文件???????16661??2011-06-02?01:50??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+\BTreeAdd.cpp
?????文件????????5905??2011-06-02?12:47??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+\BTreeAdd.h
?????文件????????2224??2011-06-02?12:48??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+\BTreeAddMain.cpp
?????文件????????1195??2011-05-31?16:02??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+\ReadMe.txt
?????文件?????????214??2011-05-31?16:02??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+\stdafx.cpp
?????文件?????????233??2011-05-31?16:02??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+\stdafx.h
?????文件?????????498??2011-05-31?16:02??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\BTreeAdd+\targetver.h
?????目錄???????????0??2011-06-29?17:09??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\Debug\
?????文件???????55808??2011-06-02?12:49??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹08版本\Debug\BTreeAdd+.exe
?????目錄???????????0??2011-06-29?17:37??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\
?????目錄???????????0??2011-06-29?17:37??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd\
?????文件?????????891??2011-05-31?07:52??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd.sln
?????文件???????16614??2011-05-31?22:36??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd\BTreeAdd.cpp
?????文件????????5882??2011-05-31?21:06??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd\BTreeAdd.h
?????文件????????4523??2011-05-17?14:01??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd\BTreeAdd.vcxproj
?????文件????????1498??2011-05-15?21:44??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd\BTreeAdd.vcxproj.filters
?????文件?????????143??2011-05-15?16:18??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd\BTreeAdd.vcxproj.user
?????文件????????2057??2011-05-31?21:09??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd\BTreeAddMain.cpp
?????文件???????????0??2011-05-31?13:47??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd\config.txt
?????文件????????2200??2011-05-31?13:51??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd\number.txt
?????文件????????1560??2011-05-15?16:18??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd\ReadMe.txt
?????文件?????????213??2011-05-15?16:18??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd\stdafx.cpp
?????文件?????????233??2011-05-15?16:18??數(shù)據(jù)庫實(shí)驗(yàn)2\B+樹10版本\BTreeAdd\stdafx.h
............此處省略73個(gè)文件信息
評(píng)論
共有 條評(píng)論