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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? btree.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;
#define NULL 0




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


template<class T>
class Node     
{
public:
	typedef struct node
	{
		int no;						//本節(jié)點(diǎn)的數(shù)據(jù)個(gè)數(shù)
		int flag;                   //葉節(jié)點(diǎn)的標(biāo)志
		int p_leaf_next[N];         //葉節(jié)點(diǎn)存放縱向地址
		T key[N];                   //存放關(guān)鍵字
		node* p_node_next[N];       //非葉節(jié)點(diǎn)存放縱向地址           
		node* p_fathernode;         //存放父節(jié)點(diǎn)地址
		node* p_next;               //節(jié)點(diǎn)存放橫向地址
		node* brother;              //刪除時(shí)用到的兄弟節(jié)點(diǎn)
	};	


	typedef struct inode
	{
		int no;						//本節(jié)點(diǎn)的數(shù)據(jù)個(gè)數(shù)
		int p_leaf_next[N];         //葉節(jié)點(diǎn)存放縱向地址
		int key[N];                   //存放關(guān)鍵字
	};

	typedef struct fnode
	{
		int no;						//本節(jié)點(diǎn)的數(shù)據(jù)個(gè)數(shù)
		int p_leaf_next[N];         //葉節(jié)點(diǎn)存放縱向地址
		float key[N];                   //存放關(guān)鍵字
	};

	typedef struct cnode
	{
		int no;						//本節(jié)點(diǎn)的數(shù)據(jù)個(gè)數(shù)
		int p_leaf_next[N];         //葉節(jié)點(diǎn)存放縱向地址
		char* key[N];               //存放關(guān)鍵字
	};



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

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

	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 & );			//數(shù)據(jù)插入(用于float與int)---可調(diào)用---
	void Resize_leaf();								//分裂葉節(jié)點(diǎn)(用于float與int)
	void Resize_nleaf();							//分裂非葉節(jié)點(diǎn)(用于float與int)
		
	void Del_data(T & ckey);						//刪除---可調(diào)用------
	void del(T & k);								//
	void del(T & k,const T & t);					//
	void Merge();									//刪除中調(diào)整合并
	void Show();
	int compare(const char* &,const char* &);		//--------------	
	int compare(const int &,const int &);			//處理int,float,char的多態(tài)問題
	int compare(const float &,const float &);		//--------------

	void Index(string &,int);					//建立索引文件
	void Buildtree(string &,int);				//建立b+樹
	void Index(string &,float);				//建立索引文件---重載
	void Buildtree(string &,float);			//建立b+樹---重載
	void Index(string &,char);					//建立索引文件--重載
	void Buildtree(string &,char);				//建立b+樹---重載
	bool Justify();

	

private:
	
	node* m_nodehead;									
	node* m_noderoot;								//實(shí)例的根結(jié)點(diǎn)
	node* m_nodeposition;							
	int m_total;									//記錄數(shù)據(jù)的總數(shù)
	bool m_opf;										//標(biāo)志是否操作過
};




//------------------------------------------
//------------------------------------------
//------------------------------------------
//-----------聲明模板類的成員函數(shù)---------------------
//------------------------------------------
//------------------------------------------
//------------------------------------------



//-----------構(gòu)造函數(shù)-------------


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;
};


//-----------析構(gòu)函數(shù)-------------


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";
/*	if(m_nodehead==m_noderoot&&m_noderoot==m_nodeposition)delete m_nodehead;
	else if(m_nodeposition==m_noderoot&&m_noderoot!=m_nodehead){delete m_nodehead;delete m_noderoot;}
	else if(m_nodeposition==m_nodehead&&m_noderoot!=m_nodehead){delete m_noderoot;delete m_nodehead;}
	else if(m_noderoot==m_nodehead&&m_nodeposition!=m_noderoot){delete m_nodehead;delete m_nodeposition;}
	else
	{
		delete m_noderoot;
		delete m_nodehead;
		delete m_nodeposition;
	}*/
}


//--------------------------------------
//-----------模板類的其他成員函數(shù)-----------------
//--------------------------------------



//-----------判斷內(nèi)存中是否存在b+樹----------------



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



//--------處理int,float,char的多態(tài)在各函數(shù)中處理比較大小-----


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;
}


//---------------初始化-------------------
//-----------開辟新節(jié)點(diǎn)時(shí)賦初值-----------------


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;
	}
}


//---------------根節(jié)點(diǎn)判斷------------------


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


//----------------葉節(jié)點(diǎn)判斷-----------------


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


//--------------尋找葉節(jié)點(diǎn)(插入時(shí))---------------


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


//--------------尋找葉節(jié)點(diǎn)(刪除時(shí))----------------


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

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

template<class T>
vector<int> Node<T>::Bsearch(T  ckey)
{
	
	bool f=false;int i;
	vector<int> no;
	Leaf_dfind(ckey);
	for(i=0;i<m_nodeposition->no;i++)				//找到在節(jié)點(diǎn)中的位置
	{
		if(compare(ckey,m_nodeposition->key[i])==0)
			{f=true;break;}
	}
	if(f==true)
	{
		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  ckey)
{
	bool f=false;int i;
	node* end;
	vector<int> no;
	Leaf_dfind(ckey);
	for(m_nodehead=m_noderoot;m_nodehead!=NULL;m_nodehead=m_nodehead->p_node_next[0])
		;
	for(i=0;i<m_nodeposition->no;i++)				//找到在節(jié)點(diǎn)中的位置
	{
		if(compare(ckey,m_nodeposition->key[i])==0)
			{f=true;end=m_nodeposition;break;}
	}
	if(f==true)
	{
		for(m_nodeposition=m_noderoot;m_nodeposition!=end;m_nodeposition=m_nodeposition->p_next)
		{
			for(int j=0;j<m_nodeposition->no;j++)
				no.push_back(m_nodeposition->p_leaf_next[j]);
		}
		for(int x=0;x<=i;x++)
			no.push_back(m_nodeposition->p_leaf_next[x]);
		
	}
	return no;
}


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


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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人精品福利| 图片区小说区国产精品视频| 亚洲视频小说图片| 蜜臀av一区二区三区| 一本到一区二区三区| 久久久亚洲国产美女国产盗摄 | 精品国精品自拍自在线| 亚洲色图视频网| 国产在线看一区| 欧美精品黑人性xxxx| 亚洲精品乱码久久久久久久久 | 欧美性猛交xxxx黑人交 | 2017欧美狠狠色| 亚洲国产日韩精品| 色女孩综合影院| 国产精品久久三区| 粗大黑人巨茎大战欧美成人| 欧美日韩一卡二卡三卡| 99视频精品在线| 国产调教视频一区| 国产福利视频一区二区三区| 日韩欧美你懂的| 麻豆专区一区二区三区四区五区| 欧美亚洲高清一区二区三区不卡| 成人免费在线视频| 99re热这里只有精品免费视频| 日本一区免费视频| 国产福利一区二区三区视频| 久久精品一区八戒影视| 国内精品不卡在线| 亚洲精品一区二区三区精华液| 久久99最新地址| 久久久亚洲欧洲日产国码αv| 韩国一区二区三区| 国产亚洲一区二区三区在线观看| 久草热8精品视频在线观看| 日韩一区二区免费在线电影 | 国产精品视频一二三| 国产激情视频一区二区三区欧美| 久久久久久一级片| 成人丝袜高跟foot| 亚洲丝袜精品丝袜在线| 在线观看视频一区二区| 亚洲高清免费观看| 精品剧情在线观看| 国产福利精品导航| 亚洲欧美日韩在线| 欧美肥胖老妇做爰| 久久福利视频一区二区| 国产日韩欧美精品一区| 91女厕偷拍女厕偷拍高清| 亚洲欧美二区三区| 欧美一级黄色片| 国产成人精品免费一区二区| 欧美国产日韩在线观看| 一本大道久久a久久综合| 日韩精品成人一区二区三区| 久久综合色之久久综合| 91麻豆.com| 老鸭窝一区二区久久精品| 国产精品天美传媒| 欧洲国产伦久久久久久久| 蜜桃一区二区三区在线| 中文子幕无线码一区tr| 欧美在线免费观看亚洲| 国模冰冰炮一区二区| 亚洲精品美腿丝袜| 久久婷婷久久一区二区三区| 色就色 综合激情| 精品一区二区三区在线视频| 亚洲精品国产一区二区精华液| 欧美一区二区三区在线视频| 国产suv一区二区三区88区| 性久久久久久久久| 国产精品视频你懂的| 日韩欧美www| 91福利在线免费观看| 国产东北露脸精品视频| 免费在线观看日韩欧美| 亚洲乱码精品一二三四区日韩在线| 3d成人h动漫网站入口| 97精品超碰一区二区三区| 全国精品久久少妇| 一区二区三区日韩欧美精品| 久久久久久久国产精品影院| 欧美日韩美女一区二区| www.亚洲色图| 盗摄精品av一区二区三区| 免费看欧美女人艹b| 亚洲国产一二三| 亚洲男人天堂av网| 国产精品欧美一级免费| 2020国产精品| 精品黑人一区二区三区久久| 欧美另类videos死尸| 色菇凉天天综合网| 97精品国产露脸对白| 成人免费va视频| 国产a视频精品免费观看| 开心九九激情九九欧美日韩精美视频电影| 一区二区三区中文在线观看| 中文字幕久久午夜不卡| 国产欧美日韩在线| 久久精品在线免费观看| 久久久精品日韩欧美| 精品日韩在线观看| 欧美成人女星排名| 精品99一区二区| 精品粉嫩超白一线天av| 久久综合九色综合久久久精品综合| 在线播放国产精品二区一二区四区| 欧美自拍偷拍一区| 在线免费精品视频| 欧美日韩国产大片| 欧美一级搡bbbb搡bbbb| 日韩一级高清毛片| 精品不卡在线视频| 精品久久久久一区二区国产| 日韩欧美国产三级电影视频| 日韩精品中文字幕在线不卡尤物| 91精品免费观看| 精品久久一区二区三区| 久久久噜噜噜久久人人看 | 亚洲韩国精品一区| 亚洲成a人在线观看| 免费看日韩精品| 国产一区二区美女诱惑| 成人黄色软件下载| 色8久久精品久久久久久蜜| 欧美日韩综合在线免费观看| 欧美精品1区2区3区| 久久综合狠狠综合久久综合88| 久久精品人人做人人爽人人| 国产精品久久久久三级| 亚洲精品国产一区二区精华液| 日韩一区精品视频| 国产一区二区日韩精品| 在线中文字幕不卡| 精品久久免费看| 国产精品久久二区二区| 日韩av高清在线观看| 国产成人综合在线| 欧洲精品视频在线观看| 欧美大片日本大片免费观看| 国产精品色婷婷久久58| 亚洲大尺度视频在线观看| 国产高清视频一区| 欧美日韩激情在线| 国产欧美1区2区3区| 亚洲一区二区在线观看视频| 国产一区二区三区久久悠悠色av| 色综合久久中文综合久久97| 欧美一区二区视频在线观看2020 | 懂色一区二区三区免费观看| 欧日韩精品视频| 久久综合久久鬼色中文字| 亚洲午夜久久久久久久久电影网 | 国产精品久久久久久久久免费相片 | 欧美tickling挠脚心丨vk| 亚洲人精品午夜| 国产在线一区二区综合免费视频| 91国偷自产一区二区三区观看| 精品久久人人做人人爰| 亚洲一区二区偷拍精品| 国产999精品久久久久久绿帽| 欧美日本视频在线| 亚洲欧美另类久久久精品 | 欧美日韩亚洲不卡| 国产精品美女久久久久aⅴ| 久久超碰97中文字幕| 精品1区2区3区| 国产精品久久久久久户外露出 | 国产久卡久卡久卡久卡视频精品| 色一情一伦一子一伦一区| 久久女同性恋中文字幕| 丝袜亚洲另类欧美| 日本韩国一区二区| ...xxx性欧美| 粉嫩欧美一区二区三区高清影视| 欧美mv日韩mv国产网站| 日韩不卡在线观看日韩不卡视频| 欧美最猛黑人xxxxx猛交| 亚洲天堂av一区| 99久久久精品| 国产欧美久久久精品影院| 激情综合色综合久久综合| 日韩精品一区二区在线观看| 三级久久三级久久久| 7777精品伊人久久久大香线蕉 | 欧美午夜寂寞影院| 亚洲美女少妇撒尿| 91视频精品在这里| 亚洲免费观看高清完整版在线观看熊| 成人亚洲精品久久久久软件| 久久色视频免费观看| 国产毛片精品一区| 国产农村妇女毛片精品久久麻豆 | 91精品国产麻豆国产自产在线| 亚洲电影欧美电影有声小说| 91免费版在线看|