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

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

?? bptree.h

?? our homework big project
?? H
?? 第 1 頁 / 共 3 頁
字號:
//b+tree.h--class definition for the b+ tree


#ifndef BTREE_H_
#define BTREE_H_

#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
#include<cstdlib>
#include<vector>
using namespace std;
const int N=5;





//---------------------------------
//----------聲明b+樹的模板類----------------
//---------------------------------


template<class T>
class Node     
{
public:
	typedef struct node
	{
		int no;						//本節點的數據個數
		int flag;                   //葉節點的標志
		int p_leaf_next[N];         //葉節點存放縱向地址
		T key[N];                   //存放關鍵字
		node* p_node_next[N];       //非葉節點存放縱向地址           
		node* p_fathernode;         //存放父節點地址
		node* p_next;               //節點存放橫向地址
		node* brother;              //刪除時用到的兄弟節點
	};	


	typedef struct tnode
	{
		int no;						//本節點的數據個數
		int p_leaf_next[N];         //葉節點存放縱向地址
		T key[N];                   //存放關鍵字
	};


	//constructor 
	Node();
	~Node();

	//others
	bool Isleaf(node* & node);						//檢測是否葉節點
	bool Isroot(const node* & nodeposition);		//檢測是否根結點
	void Ini(node* & p);							//節點初始化
	void Leaf_ifind(T & the_key);					//葉結點查找函數(插入時)
	void Leaf_dfind(T & the_key);					//葉結點查找函數(刪除時)

	vector<int> Eqsearch(T & key);
	vector<int> Neqsearch(T & key);
	vector<int> Besearch(T & key);
	vector<int> Bsearch(T & key);
	vector<int> Ssearch(T & key);
	vector<int> Sesearch(T & key);

	
	void Insert_node(T & ,const int & );			//數據插入(用于float與int)---可調用---
	void Resize_leaf();								//分裂葉節點(用于float與int)
	void Resize_nleaf();							//分裂非葉節點(用于float與int)
		
	void Del_data(T & ckey);						//刪除---可調用------
	void del(T & k);								//
	void del(T & k,const T & t);					//
	void Merge();									//刪除中調整合并
//	void Show();
	int compare(const char* &,const char* &);		//--------------	
	int compare(const int &,const int &);			//處理int,float,char的多態問題
	int compare(const float &,const float &);		//--------------

	void Index(string &);					//建立索引文件
	void Buildtree(string &);				//建立b+樹
	bool Justify();

	

private:
	
	node* m_nodehead;									
	node* m_noderoot;								//實例的根結點
	node* m_nodeposition;							
	int m_total;									//記錄數據的總數
	bool m_opf;										//標志是否操作過
};




//------------------------------------------
//------------------------------------------
//------------------------------------------
//-----------聲明模板類的成員函數---------------------
//------------------------------------------
//------------------------------------------
//------------------------------------------



//-----------構造函數-------------


template<class T>
Node<T>::Node()
{
	m_total=0;
	m_nodehead=new node;
	m_opf=false;
	m_nodehead->p_next=NULL;
	m_nodehead->brother=NULL;
	m_nodehead->p_fathernode=NULL;
	for(int i=0;i<N;i++)
	{
		m_nodehead->p_node_next[i]=NULL;
		m_nodehead->p_leaf_next[i]=NULL;
		m_nodehead->key[i]=NULL;
	}
	m_nodehead->p_node_next[N-1]=NULL;
	m_nodehead->p_leaf_next[N-1]=NULL;
	m_nodehead->no=0;
	m_nodehead->flag=1;
	m_noderoot=m_nodehead;
	m_nodeposition=m_nodehead;
};


//-----------析構函數-------------


template<class T>
Node<T>::~Node()
{
	node* temp=m_noderoot;
	node* temp1;node* temp2;
	for(;Isleaf(temp)==0;)
	{
		temp1=temp;
		temp=temp->p_node_next[0];
		for(;temp1->p_next!=NULL;)
		{
			temp2=temp1;
			temp1=temp1->p_next;
			delete temp2;
			temp2=NULL;
		}
		delete temp1;
		temp1=NULL;
		temp2=NULL;
	}
	for(;temp->p_next!=NULL;)
	{
		temp1=temp;
		temp=temp->p_next;
		delete temp1;
		temp1=NULL;
	}
	delete temp;
	temp=NULL;
	cout<<"haha";

}


//--------------------------------------
//-----------模板類的其他成員函數-----------------
//--------------------------------------



//-----------判斷內存中是否存在b+樹----------------



template<class T>
bool Node<T>::Justify()
{
	if(m_opf==true)
		return true;
	else
		return false;
}



//--------處理int,float,char的多態在各函數中處理比較大小-----


template<class T>
int Node<T>::compare(const float & a,const float & b)
{
	if((a-b)>-0.001&&(a-b)<0.001)return 0;
	else if((a-b)>-0.001)return 1;
	else 
		return -1;
}

template<class T>
int Node<T>::compare(const char* & a,const char* & b)
{
	if(b==NULL)b="";
	if((string)a==(string)b)return 0;
	else if((string)a>(string)b)return 1;
	else 
		return -1;
}

template<class T>
int Node<T>::compare(const int & a,const int & b)
{
	if(a==b)return 0;
	else if(a>b)return 1;
	else
		return -1;
}


//---------------初始化-------------------
//-----------開辟新節點時賦初值-----------------


template<class T>
void Node<T>::Ini(node* & p)		
{
	p->p_next=NULL;
	p->brother=NULL;
	p->p_fathernode=NULL;
	p->no=NULL;
	p->flag=0;
	for(int i=0;i<N;i++)
	{
		p->p_node_next[i]=NULL;
		p->p_leaf_next[i]=NULL;
		p->key[i]=NULL;
	}
}


//---------------根節點判斷------------------


template<class T>
bool Node<T>::Isroot(const node* & nodeposition)
{
	
	if(nodeposition->p_fathernode==NULL)
		return 1;
	else
		return 0;
}


//----------------葉節點判斷-----------------


template<class T>
bool Node<T>::Isleaf(node* & cnode)
{
	if(cnode->flag==0)
		return false;
	else
		return true;
}


//--------------尋找葉節點(插入時)---------------


template<class T>
void Node<T>::Leaf_ifind(T & the_key)
{
	bool f=false;
	m_nodeposition=m_noderoot;
	
	while(Isleaf(m_nodeposition)==0)						//還沒到葉節點則繼續向下找到葉節點就中止
	{
		for(int i=0;i<m_nodeposition->no;i++)				//在各層節點中尋找相應的位置				
		{
			f=false;
			if(compare(the_key,m_nodeposition->key[i])==0||
				compare(the_key,m_nodeposition->key[i])==-1)//找到后指針指向下層節點并跳出循環
			{
				m_nodeposition=m_nodeposition->p_node_next[i];	 
				f=true;
				break;											 
			}
		}
		if(f==false)break;
	}
	if(f==false)											//尋找的值比任意值都大就指向最右邊的葉節點
	{
		for(;Isleaf(m_nodeposition)==0;)					//一路上順便替換最大值
		{
			m_nodeposition->key[m_nodeposition->no-1]=the_key;
			m_nodeposition=m_nodeposition->p_node_next[m_nodeposition->no-1];
		}
	}
}


//--------------尋找葉節點(刪除時)----------------


template<class T>
void Node<T>::Leaf_dfind(T & the_key)
{
	bool f=false;
	m_nodeposition=m_noderoot;
	
	while(Isleaf(m_nodeposition)==0)							//還沒到葉節點則繼續向下找到葉節點就中止
	{
		for(int i=0;i<m_nodeposition->no;i++)					//在各層節點中尋找相應的位置				
		{
			f=false;
			if(compare(the_key,m_nodeposition->key[i])==0||
				compare(the_key,m_nodeposition->key[i])==-1)	//找到后指針指向下層節點并跳出循環
			{
				m_nodeposition=m_nodeposition->p_node_next[i];	 
				f=true;
				break;											 
			}
		}
		if(f==false)break;
	}
	if(f==false)												  //尋找的值比任意值都大就指向最右邊的葉節點
	{
		for(;Isleaf(m_nodeposition)==0;)
		{
			m_nodeposition=m_nodeposition->p_node_next[m_nodeposition->no-1];
		}
	}
}


//--------------尋找相等的值----------------


template<class T>
vector<int> Node<T>::Eqsearch(T & key)
{
	bool f=false;
	vector<int> no;

	Leaf_dfind(key);
	for(int i=0;i<m_nodeposition->no;i++)				//找到在節點中的位置
	{
		if(compare(ckey,m_nodeposition->key[i])==0)
			{f=true;no.push_back(m_nodeposition->p_leaf_next[i]);break;}
	}
	return no;
}


//--------------尋找不相等-----------------


template<class T>
vector<int> Node<T>::Neqsearch(T & key)
{
	vector<int> no;
	for(m_nodehead=m_noderoot;m_nodehead!=NUll;m_nodehead=m_nodehead->p_node_next[0])
		m_nodeposition=m_nodehead;
	for(;m_nodeposition!=NULL;m_nodeposition->p_next)
	{
		for(int i=0;i<m_nodeposition->no;i++)
		{
			if(m_nodeposition->key[i]!=key)
				no.push_back(m_nodeposition->p_leaf_next[i]);
		}
	}
	return no;
}


//------------尋找>=----------------------


template<class T>
vector<int> Node<T>::Besearch(T & key)
{
	bool f=false;int i;
	vector<int> no;
	Leaf_dfind(key);
	for(i=0;i<m_nodeposition->no;i++)				//找到在節點中的位置
	{
		if(compare(ckey,m_nodeposition->key[i])==0)
			{f=true;break;}
	}
	if(f==ture)
	{
		for(;i<m_nodeposition->no;i++)
		{
			no.push_back(m_nodeposition->p_leaf_next[i]);
		}
		for(m_nodeposition=m_nodeposition->p_next;m_nodeposition!=NULL;m_nodeposition=m_nodeposition->p_next)
		{
			for(int j=0;j<m_nodeposition->no;j++)
				no.push_back(m_nodeposition->leaf_next[j]);
		}
	}
	return no;
}

//-------------尋找>-------------------

template<class T>
vector<int> Node<T>::Bsearch(T & key)
{
	
	bool f=false;int i;
	vector<int> no;
	Leaf_dfind(key);
	for(i=0;i<m_nodeposition->no;i++)				//找到在節點中的位置
	{
		if(compare(ckey,m_nodeposition->key[i])==0)
			{f=true;break;}
	}
	if(f==ture)
	{
		for(;i+1<m_nodeposition->no;i++)
		{
			no.push_back(m_nodeposition->p_leaf_next[i+1]);
		}
		for(m_nodeposition=m_nodeposition->p_next;m_nodeposition!=NULL;m_nodeposition=m_nodeposition->p_next)
		{
			for(int j=0;j<m_nodeposition->no;j++)
				no.push_back(m_nodeposition->p_leaf_next[j]);
		}
		
	}
	return no;
}

//----------------尋找<=-----------------


template<class T>
vector<int> Node<T>::Sesearch(T & key)
{
	bool f=false;int i;
	node* end;
	vector<int> no;
	Leaf_dfind(key);
	for(m_nodehead=m_noderoot;m_nodehead!=NUll;m_nodehead=m_nodehead->p_node_next[0])
		;
	for(i=0;i<m_nodeposition->no;i++)				//找到在節點中的位置
	{
		if(compare(ckey,m_nodeposition->key[i])==0)
			{f=true;end=m_nodeposition;break;}
	}
	if(f==ture)
	{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第四色夜色| 午夜精品成人在线| 91精品国产综合久久久久久| 色婷婷av一区| 在线观看亚洲精品视频| 欧美系列一区二区| 欧美日韩在线播| 欧美一区二区三区影视| 精品免费视频一区二区| 久久亚洲综合色一区二区三区 | 高清成人免费视频| 成人动漫一区二区| 欧洲av一区二区嗯嗯嗯啊| 欧美三级中文字幕在线观看| 欧美日韩电影在线| 26uuu国产一区二区三区| 国产欧美一区二区在线| 亚洲欧美另类久久久精品| 亚洲综合无码一区二区| 日韩av高清在线观看| 久久激情五月婷婷| 国产精品一区二区黑丝| 99re8在线精品视频免费播放| 欧美亚洲国产bt| 精品日韩av一区二区| 国产亚洲制服色| 亚洲另类色综合网站| 天天色综合成人网| 国产一区二区三区日韩| 色综合一个色综合亚洲| 日韩视频123| 亚洲人吸女人奶水| 免费在线观看一区| 97久久久精品综合88久久| 欧美一区二区三区色| 欧美激情综合五月色丁香小说| 亚洲激情第一区| 国模一区二区三区白浆| 色婷婷av久久久久久久| 久久亚洲二区三区| 亚洲va欧美va人人爽午夜| 国产精品1区2区| 在线91免费看| 一区二区三区在线看| 国产乱淫av一区二区三区| 日本精品视频一区二区| 久久久亚洲精品一区二区三区| 亚洲激情在线激情| 国产精品18久久久久久vr| 欧美日韩视频在线一区二区| 国产精品色噜噜| 国产在线视频精品一区| 欧美男男青年gay1069videost| 中文字幕五月欧美| 国模无码大尺度一区二区三区| 欧美日本一区二区在线观看| 国产精品视频免费| 国产精品性做久久久久久| 欧美日韩国产在线播放网站| 亚洲三级小视频| 成人午夜电影小说| 亚洲精品一区二区三区四区高清| 亚洲小说春色综合另类电影| 99久久综合精品| 国产女主播视频一区二区| 精品综合免费视频观看| 91麻豆精品国产91久久久久| 亚洲mv在线观看| 精品视频在线看| 亚洲欧美日韩久久精品| 99精品视频在线免费观看| 亚洲婷婷综合久久一本伊一区| 国产91精品一区二区| 欧美激情一区二区三区不卡| 国产成人午夜高潮毛片| 国产日韩在线不卡| 成人激情小说网站| 亚洲精品国产品国语在线app| 一本在线高清不卡dvd| 一级做a爱片久久| 欧美日韩免费视频| 日本成人在线不卡视频| 日韩欧美综合一区| 国产一区二区三区综合| 中国av一区二区三区| 色综合久久久网| 石原莉奈在线亚洲二区| 日韩亚洲欧美在线| 国产麻豆视频精品| 亚洲少妇30p| 欧美日韩你懂的| 久久福利资源站| 国产精品婷婷午夜在线观看| www.日本不卡| 水野朝阳av一区二区三区| 欧美一区二区视频网站| 久久99深爱久久99精品| 国产精品久久久久影院色老大| 91丨九色丨蝌蚪丨老版| 午夜视频在线观看一区| www久久久久| 在线免费不卡视频| 麻豆国产91在线播放| 国产精品视频yy9299一区| 欧美视频一区在线观看| 国产乱码精品一区二区三区五月婷| 国产精品美女视频| 91精品国产91热久久久做人人| 国产一区二区久久| 亚洲一区二区三区爽爽爽爽爽| 日韩欧美一区二区免费| 成人国产电影网| 日本sm残虐另类| 亚洲视频在线观看一区| 欧美一级精品大片| 色琪琪一区二区三区亚洲区| 久久福利资源站| 亚洲国产一二三| 国产精品每日更新在线播放网址| 欧美精品乱码久久久久久| 成人av动漫在线| 久久99精品国产.久久久久久| 亚洲最大成人综合| 国产精品久久久久久久第一福利 | 成人av网站免费| 丝袜美腿亚洲一区| 亚洲精品亚洲人成人网 | 欧美激情中文字幕一区二区| 欧美视频完全免费看| 99视频有精品| 国产成人精品免费在线| 久久国产尿小便嘘嘘尿| 日韩成人午夜精品| 一区二区三区四区在线| 中文字幕一区二区三区在线观看| 日韩一区二区三| 7777精品伊人久久久大香线蕉经典版下载 | www久久精品| 91精品国产手机| 在线观看国产日韩| 91麻豆国产精品久久| 成人免费va视频| 顶级嫩模精品视频在线看| 国产乱理伦片在线观看夜一区| 麻豆精品一区二区综合av| 天堂一区二区在线| 三级精品在线观看| 日韩一区精品字幕| 免播放器亚洲一区| 美女一区二区三区在线观看| 亚洲bdsm女犯bdsm网站| 亚洲一区二区三区国产| 亚洲一区二区三区中文字幕| 一区二区三区影院| 亚洲一区二区在线免费看| 亚洲自拍偷拍麻豆| 亚洲午夜一区二区| 奇米色一区二区三区四区| 日产国产欧美视频一区精品| 丝袜亚洲另类丝袜在线| 青青草一区二区三区| 久久99在线观看| 国产69精品久久久久毛片| 成人午夜av影视| 91麻豆国产自产在线观看| 欧洲视频一区二区| 91精品国产麻豆| 久久精品欧美日韩精品| 成人欧美一区二区三区视频网页| 国产精品国产成人国产三级| 亚洲视频在线观看一区| 首页欧美精品中文字幕| 日本不卡免费在线视频| 国产成人免费网站| 色偷偷久久一区二区三区| 欧美一区二区三区视频在线 | 亚洲欧美另类小说| 亚洲成人av免费| 国产美女av一区二区三区| 一本色道久久综合精品竹菊| 欧美喷水一区二区| 国产女人18水真多18精品一级做| 国产精品美女久久久久久久网站| 一区二区三区产品免费精品久久75| 日韩高清不卡一区二区| 国产很黄免费观看久久| 91久久精品一区二区三区| 91精品国产色综合久久久蜜香臀| 日本一区二区三区四区| 亚洲一区二区3| 国产一本一道久久香蕉| 欧美日韩一区二区在线观看视频| 日韩精品一区二区三区视频播放 | 国产麻豆精品一区二区| 欧美色视频在线| 中文字幕一区二区三中文字幕| 青青青爽久久午夜综合久久午夜 | 亚洲国产成人高清精品| 国产精品亚洲人在线观看| 欧美性色欧美a在线播放|