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

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

?? b_tree.h

?? B樹的實現以及圖形化顯示
?? H
?? 第 1 頁 / 共 2 頁
字號:
//////////////////////////////////////////////////////////////////////////
//姓名: 林文清
//學號: 0610374
//專業: 計算機科學與技術
//課程: 數據結構
//////////////////////////////////////////////////////////////////////////

enum Error_code{success,overflow,duplicate_error,not_present};  //結果返回類型
static int one_sqare=27;    //設置顯示圖形每個方格的邊的長度
//////////////////////////////////////////////////////////////////////////
//B-Tree的結點數據結構B_node的聲明
//////////////////////////////////////////////////////////////////////////
template <class Record>
class B_node{
public:
	int count;      //記錄存入的關鍵字數
	Record* data;   //關鍵字指針
	B_node<Record>** branch;   //每個B-Tree節點的枝節邊指針
	//構造函數
	B_node(int num){            //num為階數
		data=new Record[num-1];
		branch=new B_node<Record>* [num];
		count=0;     //初始關鍵數為0
	}
	//析構函數
	~B_node(){
		delete []data;
		delete []branch;
	}
};
//////////////////////////////////////////////////////////////////////////
//B-tree類的聲明
//////////////////////////////////////////////////////////////////////////
template <class Record>
class B_tree
{
	int order;    //階數
	B_node<Record> *root;  //根節點
	bool whether_created;  //用于判斷是否已經構造了B-Tree
public:
	//無參構造函數
	B_tree(){
		root=NULL;
		whether_created=false;
	}
	//含參構造函數
	B_tree(int num){
		order=num;
		whether_created=true;
		root=NULL;
	}
	Error_code set_order(int);           //設置階數
	Error_code insert(Record);           //插入關鍵字
	Error_code search_tree(Record&);     //在樹中查找關鍵字
	Error_code search_node(B_node<Record> *, const Record &, int &);         //在結點中查找關鍵字
	Error_code push_down(B_node<Record>*,Record,Record&,B_node<Record>* &);  //在結點中插入關鍵字
	Error_code recursive_search_tree(B_node<Record> *, Record &);            //遞歸查找關鍵字
	void push_in(B_node<Record> *,const Record &,B_node<Record> *,int );     //往上一個結點中插入關鍵字
    void split_node(B_node<Record> *,const Record &,B_node<Record> *,int,B_node<Record> * &,Record &); //分裂結點
    Error_code remove(const Record &);                               //刪除關鍵字
	Error_code recursive_remove(B_node<Record> *, const Record &);   //遞歸刪除結點
	void remove_data(B_node<Record> *, int);                         //直接刪除關鍵字
	void copy_in_predecessor(B_node<Record> *,int);                  //從上一個結點摘一個結點過來
	void restore(B_node<Record> *, int);                             //重新存儲結點
	void move_left(B_node<Record> *,int);                            //向左移動結點
	void move_right(B_node<Record> *,int);                           //向右移動結點
	void combine(B_node<Record> *,int);                              //合并結點
	void print_B_tree(B_node<Record>*,CDC*,CPoint,int);              //遞歸打印結點
	void display(CDC*,CPoint);                                       //打印結點
};
template<class Record>
Error_code B_tree<Record>::set_order(int num)
{
	if (!whether_created)
	{
		order=num;
		whether_created=true;
		return success;
	}
	return duplicate_error;
}
template<class Record>
Error_code B_tree<Record>::search_node(B_node<Record> *current, const Record &target, int &position)
{
	position = 0;
	while (position < current->count &&target > current->data[position])
		position++;
	if (position<current->count&&target==current->data[position])
		return success;
	else
		return not_present;
}
template<class Record>
Error_code B_tree<Record> ::recursive_search_tree(B_node<Record> *current, Record &target)
{
	Error_code result = not_present;
	int position;
	if (current != NULL) {
		result = search_node(current, target,position);    //在結點中查找
		if (result == not_present) //如果要插入的關鍵字不在B-Tree中
			result = recursive_search_tree (current->branch[position], target);
		else                        //如果要插入的關鍵字在B-Tree中
			target = current->data[position];
	}
	return result;
}
template<class Record>
Error_code B_tree<Record> ::search_tree(Record &target)
{
	return recursive_search_tree(root, target);
}
template<class Record>
void B_tree<Record>::push_in( B_node<Record> *current,const Record &entry,B_node<Record> *right_branch,int position)
{
	//采用類似插入排序的方式插入關鍵字
	for (int i = current->count; i > position; i--) {
		current->data[i] = current->data[i-1];
		current->branch[i+1] = current->branch[i];
	}
	current->data[position] = entry;
	current->branch[position+1] = right_branch;
	current->count ++;
}
template<class Record>
void B_tree<Record> :: split_node(B_node<Record> *current,const Record &extra_entry, B_node<Record> *extra_branch,int position,B_node<Record> * &right_half, Record &median)
{
	right_half = new B_node<Record>(order);
	int mid = order/2;            //從中間位置開始分裂
	if (position <= mid) {        //如果要插入的關鍵字的位置小于等于中間位置
		for (int i = mid; i < order - 1; i++) {
			right_half->data[i - mid] = current->data[i];
			right_half->branch[i + 1 - mid] =current->branch[i +1];
		}
		current->count = mid;
		right_half->count = order - 1 - mid;
		push_in(current, extra_entry,extra_branch, position);
	}
	else {                       //如果要插入的關鍵字的位置小于中間位置
		mid++;
		for (int i = mid; i < order - 1; i++) {
			right_half->data[i - mid] = current->data[i];
			right_half->branch[i + 1 - mid] =current->branch[i + 1];
		}
		current->count = mid;
		right_half->count = order - 1 - mid;
		push_in(right_half, extra_entry, extra_branch, position -mid);
	}
	median = current->data[current->count - 1];
	right_half->branch[0] = current->branch[current->count];
	current->count--;
}
template <class Record,int order>
Error_code B_tree<Record>::push_down(B_node<Record>* current,Record new_entry,Record& median,B_node<Record>* &right_branch)
{
	Error_code result;
	int position;
	if(current==NULL)   //如果指針為空
	{
		median=new_entry;
		right_branch=NULL;
		result=overflow;
	}
	else{         //指針不為空
		if(search_node(current,new_entry,position)==success)    //如果要插入的關鍵字在B-Tree中
			result=duplicate_error;
		else{                                                   //如果要插入的關鍵字不在B-Tree中
			Record extra_entry;
			B_node<Record> *extra_branch;
			result=push_down(current->branch[position],new_entry,extra_entry,extra_branch);
			if(result==overflow){   //如果溢出
				if(current->count<(order-1)){    //如果插入當前結點不會溢出
					result=success;
					push_in(current,extra_entry,extra_branch,position);   //直接插入該結點
				}
				else   //如果插入當前結點會溢出,則分裂結點
					split_node(current,extra_entry,extra_branch,position,right_branch,median);
			}
		}
	}
	return result;
}
template <class Record,int order>
Error_code B_tree<Record>::insert(Record new_entry)
{
	Record median;
	B_node<Record> *right_branch,*new_root;
	Error_code result=push_down(root,new_entry,median,right_branch);
	if(result==overflow)   //如果插入溢出到根結點,則根結點分裂
	{
		new_root=new B_node<Record>(order);
		new_root->count=1;
		new_root->data[0]=median;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久天堂av| 天堂成人免费av电影一区| 亚洲精品少妇30p| 久久狠狠亚洲综合| 国产一区亚洲一区| 欧美日韩国产另类一区| 欧美激情在线看| 国产在线观看一区二区| 欧美精品自拍偷拍| 一区二区国产视频| 99久久国产免费看| 国产亚洲污的网站| 精品一区二区三区视频在线观看| 91黄视频在线| 亚洲免费视频成人| 国产.欧美.日韩| www激情久久| 美女视频黄a大片欧美| 欧美日韩国产综合一区二区| 一个色综合av| 色婷婷狠狠综合| 1024亚洲合集| 一本久久精品一区二区| 亚洲欧洲av一区二区三区久久| 国产精品亚洲综合一区在线观看| 日韩视频在线永久播放| 日本在线不卡视频一二三区| 欧美美女激情18p| 亚洲成年人影院| 777午夜精品免费视频| 亚洲成人tv网| 777a∨成人精品桃花网| 日本午夜一区二区| 日韩精品一区二区三区视频播放 | 一区二区三区国产| 日本黄色一区二区| 亚洲国产日韩av| 欧美二区在线观看| 免费观看一级欧美片| 欧美r级在线观看| 国产麻豆精品theporn| 中文字幕第一区二区| eeuss国产一区二区三区| 亚洲男人的天堂网| 欧美精品vⅰdeose4hd| 看电影不卡的网站| 欧美激情一区在线观看| 色综合久久99| 午夜精品福利久久久| 亚洲精品一区二区精华| k8久久久一区二区三区| 亚洲风情在线资源站| 欧美一区二区成人6969| 国产精品一区免费视频| 亚洲欧洲综合另类| 宅男噜噜噜66一区二区66| 九九在线精品视频| 国产精品美女久久久久久久网站| 在线一区二区视频| 狂野欧美性猛交blacked| 国产性色一区二区| 91同城在线观看| 日本女人一区二区三区| 国产区在线观看成人精品| 91极品视觉盛宴| 国产真实乱对白精彩久久| 亚洲色图色小说| 日韩欧美另类在线| 91日韩一区二区三区| 免费成人在线观看视频| 中文字幕一区二区5566日韩| 91精品黄色片免费大全| 国产成人av影院| 午夜一区二区三区视频| 国产午夜精品久久久久久免费视 | 国产伦精一区二区三区| 亚洲一区在线观看网站| 久久精品一区蜜桃臀影院| 91久久久免费一区二区| 精品一二线国产| 亚洲综合色在线| 日本一区二区免费在线观看视频| 欧美女孩性生活视频| 丁香激情综合国产| 蜜乳av一区二区| 亚洲影视在线观看| 国产精品―色哟哟| 精品sm在线观看| 欧美日韩一区二区欧美激情| 成人午夜视频福利| 久久99久久久欧美国产| 亚洲福利一二三区| 最新热久久免费视频| 久久精品一区二区三区不卡牛牛| 欧美精品日韩一区| 91麻豆精品秘密| 处破女av一区二区| 国产精品资源在线看| 久久国产福利国产秒拍| 肉色丝袜一区二区| 亚洲精品中文在线观看| 中文字幕在线不卡一区 | 夜夜精品浪潮av一区二区三区| 国产午夜精品久久久久久免费视| 日韩欧美在线一区二区三区| 欧美人与性动xxxx| 欧美性欧美巨大黑白大战| 一本久久a久久精品亚洲 | 久久精品国产久精国产爱| 日韩在线播放一区二区| 亚洲成人av福利| 天堂成人国产精品一区| 亚洲图片欧美色图| 午夜久久久久久| 婷婷丁香久久五月婷婷| 午夜精品久久久久久久久久久| 亚洲激情在线激情| 亚洲综合丝袜美腿| 亚洲成av人片一区二区梦乃| 亚洲高清不卡在线观看| 亚瑟在线精品视频| 日本女人一区二区三区| 久久精品免费看| 国产精品一区二区男女羞羞无遮挡| 韩国精品免费视频| 国产成人精品免费网站| 成人午夜视频在线观看| 91色乱码一区二区三区| 色av成人天堂桃色av| 欧美亚洲国产一区在线观看网站| 91成人国产精品| 91麻豆精品国产91久久久久久久久| 91麻豆精品国产91久久久资源速度 | 国产成人三级在线观看| 成人黄色av网站在线| 不卡大黄网站免费看| 色噜噜狠狠成人网p站| 欧美日韩精品久久久| 日韩精品一区二区三区视频播放 | 成人一区在线观看| 99精品国产一区二区三区不卡| 欧美系列亚洲系列| 日韩女优毛片在线| 国产精品久久久久久久久快鸭| 亚洲麻豆国产自偷在线| 午夜影院久久久| 国产99久久久久久免费看农村| 色嗨嗨av一区二区三区| 日韩欧美亚洲另类制服综合在线| 国产夜色精品一区二区av| 夜夜精品浪潮av一区二区三区| 美女免费视频一区二区| 成人免费毛片高清视频| 欧美日韩在线观看一区二区| 精品欧美一区二区在线观看| 国产精品黄色在线观看| 图片区小说区国产精品视频| 国产精品影视网| 欧美挠脚心视频网站| 国产欧美一区二区三区沐欲| 亚洲成人免费电影| 成人黄色小视频| 日韩午夜在线观看视频| 中文字幕一区二区三区av| 久久精品国产亚洲高清剧情介绍 | 国产91露脸合集magnet| 欧美三级电影一区| 欧美激情一区二区三区在线| 亚洲成人免费在线观看| fc2成人免费人成在线观看播放 | 一区二区三区高清不卡| 国产乱码精品一区二区三| 欧美日韩精品三区| 中文字幕色av一区二区三区| 久久成人免费网| 欧美日韩高清影院| 中文字幕中文字幕一区二区| 蜜桃在线一区二区三区| 欧美亚洲综合色| 国产精品国产三级国产aⅴ原创| 麻豆91免费看| 欧美三级日韩三级| 亚洲三级免费观看| 成人激情免费网站| 精品国产123| 美美哒免费高清在线观看视频一区二区 | 亚洲视频在线一区| 国产成人av电影在线| 久久综合国产精品| 美女诱惑一区二区| 69成人精品免费视频| 亚洲一区二区三区四区的| av电影在线观看完整版一区二区| 国产婷婷一区二区| 国产东北露脸精品视频| 26uuu亚洲| 国产一二三精品| 久久综合精品国产一区二区三区| 麻豆精品蜜桃视频网站| 欧美一级生活片|