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

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

?? avl.cpp

?? avl平衡樹做的電話號(hào)碼系統(tǒng)!!!可支持查詢
?? CPP
字號(hào):
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
const int max=10;
 struct Tele
 {
       string name;   //姓名
       string phoneNumber;    //固定電話號(hào)碼
       string mobileNumber;   //移動(dòng)電話號(hào)碼
       string email;   //電子郵箱
 } Tel[max];
 int taller=0;		//taller反映T長(zhǎng)高與否
int shorter=0;		//shorter反映T變矮與否

 
 //**********************************************************************

 //在屏幕打印菜單函數(shù)
int PrintMenu()
{
    int userChose;
    cout << "**************************************" << endl;
    cout << "       1. 查找電話號(hào)碼" << endl;
    cout << "       2. 插入電話號(hào)碼" << endl;
	cout << "       3. 刪除電話號(hào)碼" << endl;
    cout << "       4. 修改信息" << endl;
    cout << "       5. 退出程序" << endl;
    cout << "***************************************" << endl;
    cout << "請(qǐng)選擇你的操作:";
    cin >> userChose;
    return userChose;
}
//*******************************************************
  class AVLTree
 {
 public:
	 struct AVLNode
	 {
		 Tele data;AVLNode *left,*right;int balance;
		 AVLNode():left(NULL),right(NULL),balance(0){}
		 AVLNode(Tele d,AVLNode *l=NULL,AVLNode *r=NULL):
		 data(d),left(l),right(r),balance(0){}
	 };
	  Tele RefValue;
	 //protected:
		 int Insert(AVLNode * &tree,Tele x,int &taller);





		 Tele Delete(AVLNode* &T,Tele e);
		 void Delete_Rightbalance(AVLNode* &T,int &shorter);
         void Delete_Leftbalance(AVLNode* &T,int &shorter);
		void DeleteAVL(AVLNode* &T,Tele e);





		 void RotateLeft(AVLNode * Tree,AVLNode * &NewTree);
		 void RotateRight(AVLNode * Tree,AVLNode * &NewTree);
		 void LeftBalance(AVLNode * &Tree,int &taller);
		 void RightBalance(AVLNode * &Tree,int &taller);
		 //int Height(AVLNode * t)const;
	 public:
		  AVLNode * root;

		  void find(const string &x,AVLNode *ptr)const
		 {
			  if(ptr==NULL)
				  cout<<"對(duì)不起,系統(tǒng)內(nèi)無此人!!!"<<endl;
			  else if(x<ptr->data.name)
				   find(x,ptr->left);
			  else if(x>ptr->data.name)
				   find(x,ptr->right);
			  else 
			  {
			  cout<<"你查找的姓名是:  "<<ptr->data.name<<endl;
			  cout<<ptr->data.name<<"的固定電話是: "<<ptr->data.phoneNumber <<endl;
			  cout<<ptr->data.name<<"的移動(dòng)電話是: "<<ptr->data.mobileNumber<<endl;
			  cout<<ptr->data.name<<"的電子郵件是: "<<ptr->data.email<<endl;
			  }
		 }
		  AVLNode * Find(string n,AVLNode * ptr)
{//查找
	if(ptr==NULL)return NULL;
	else if(n<ptr->data.name) return Find(n,ptr->left);
	else if(n>ptr->data.name) return Find(n,ptr->right);
	else return ptr;
}
		 AVLTree():root(NULL){}
		 AVLTree(Tele Ref):RefValue(Ref),root(NULL){}
		 int Insert(Tele x)
		 {
			 int taller;return Insert(root,x,taller);
		 }
		 //friend istream &operator >>(istream& in,AVLTree &Tree);
		 //friend ostream &operator<<(ostream& out,const AVLTree &Tree);
		 int Height()const;
		 //void Traverse(AVLNode *ptr,ostream &out)const;
		 void change(string n);//修改
 };
 //***********************************************************
void AVLTree ::RotateLeft ( AVLNode *Tree,AVLNode * &NewTree )
 {
     NewTree = Tree->right;
     Tree->right = NewTree->left;			         
     NewTree->left = Tree;
}                        
//**************************************************************
void AVLTree::RotateRight ( AVLNode *Tree, AVLNode * &NewTree)
 {
     NewTree = Tree->left;
    Tree->left = NewTree->right;			
    NewTree->right = Tree;
}                           
 //***************************************************************
 void AVLTree::LeftBalance(AVLNode * &Tree,int &taller)
 {
	 AVLNode *leftsub=Tree->left,* rightsub;
	 switch(leftsub->balance)
	 {
		 case -1:
			 Tree->balance=leftsub->balance=0;
			 RotateRight(Tree,Tree);taller=0;break;
		 case 0: 
			 break;
		 case 1:
			 if(leftsub->right!=NULL)
			 {
			 rightsub=leftsub->right;
			 switch(rightsub->balance)
			 {
			 case -1:
				 Tree->balance=1;leftsub->balance=0;break;
			 case 0:
				 Tree->balance=leftsub->balance=0;break;
			 case 1:
				 Tree->balance=0;leftsub->balance=-1;break;
			 }
			 }
			 else
				 break;
			 rightsub->balance=0;
			 RotateLeft(leftsub,Tree->left);
			 RotateRight(Tree,Tree);taller=0;
	 }
 }
 //*******************************************************************
void AVLTree::RightBalance(AVLNode * &Tree,int &taller)
 {
	 AVLNode *rightsub=Tree->right,* leftsub;
	 switch(rightsub->balance)
	 {
		 case -1:
			 Tree->balance=rightsub->balance=0;
			 RotateRight(Tree,Tree);taller=0;break;
		 case 0:
			 break;
		 case 1:
			 if(rightsub->left!=NULL)
			 {
			 leftsub=rightsub->left;
			 switch(leftsub->balance)
			 {
			 case -1:
				 Tree->balance=1;rightsub->balance=0;break;
			 case 0:
				 Tree->balance=rightsub->balance=0;break;
			 case 1:
				 Tree->balance=0;rightsub->balance=-1;break;
			 }
			 }
			 else
				 break;
			 leftsub->balance=0;
			 RotateRight(rightsub,Tree->right);
			 RotateLeft(Tree,Tree);taller=0;
	 }
 }
//************************************************************
 int AVLTree::Insert(AVLNode* &tree,Tele x,int &taller)
{
	int success;
	if(tree==NULL)
	{
		tree=new AVLNode(x);
		success=tree!=NULL? 1:0;
		if(success) taller=1;
	}
	else if(x.name<tree->data.name)
	{
		success=Insert(tree->left,x,taller);
		if(taller)
			switch(tree->balance)
		{
			case -1:LeftBalance(tree,taller);break;
			case 0:tree->balance=-1;break;
			case 1:tree->balance=0;taller=0;break;
		}
	}
	else if(x.name>tree->data.name)
	{
		success=Insert(tree->right,x,taller);
		if(taller)
			switch(tree->balance)
		{
			case -1:
				tree->balance=0;taller=0;break;
			case 0:
				tree->balance=1;break;
			case 1:
				RightBalance(tree,taller);break;
		}
	}
	return success;
}
//**********************************************************
/*istream &operator>>(istream &in,AVLTree &Tree)
{
	Tele item;
	cout<<"Construct AVL tree:\n";
	cout<<"input data:";
	in>>item.name>>item.phoneNumber>>item.mobileNumber>>item.email;
	while(item.name!=Tree.RefValue)
	{
		Tree.Insert(item);
		cout<<"input data:";
	in>>item.name>>item.phoneNumber>>item.mobileNumber>>item.email;
	}
	return in;
}
//************************************************************
ostream &operator<<(ostream &out,const AVLTree &Tree)
{
	out<<"inorder traversal of avl tree.\n";
	Tree.Traverse(Tree.root,out);
	out<<endl;
	return out;
}*/
//************************************************************* 
/*void AVLTree::Traverse(AVLNode *ptr,ostream &out)const
{
	if(ptr!=NULL)
	{
		Traverse(ptr->left,out);
		      out<<"你查找的姓名是:  "<<ptr->data.name<<endl;
			  out<<ptr->data.name<<"的固定電話是: "<<ptr->data.phoneNumber <<endl;
			  out<<ptr->data.name<<"的移動(dòng)電話是: "<<ptr->data.mobileNumber<<endl;
			  out<<ptr->data.name<<"的電子郵件是: "<<ptr->data.email<<endl;
//out<<ptr->data.name<<' '<<ptr->data.phoneNumber<<' '<<ptr->data.mobileNumber<<' '<<ptr->data.email;
		Traverse(ptr->right,out);
	}
}*/
//**************************************************************
void AVLTree::change(string n)
{//修改
	int w;
	string num;
	AVLNode *temp;
	if(!Find(n,root))
	{
		cout<<"對(duì)不起,系統(tǒng)內(nèi)無此人!!!"<<endl;
	}
	else
	{
	temp=Find(n,root);
cout<<"*************************************"<<endl;
cout<<"   要修改名字請(qǐng)輸入1;"<<endl;
cout<<"   要修改固定電話請(qǐng)輸入2;"<<endl;
cout<<"   要修改移動(dòng)電話請(qǐng)輸入3;"<<endl;
cout<<"   要修改郵件請(qǐng)輸入4:"<<endl;
cout<<"*************************************"<<endl;
 cin>>w;
   if(w==1)
   {
	cout<<"請(qǐng)輸入改后的名字:  "<<endl;
	cin>>num;
	temp->data.name=num;
   }
   else if(w==2)
   {
	   	cout<<"請(qǐng)輸入改后的固定電話號(hào)碼:  "<<endl;
	cin>>num;
	temp=Find(n,root);
	temp->data.phoneNumber=num;
   }
    else if(w==3)
   {
	   	cout<<"請(qǐng)輸入改后的移動(dòng)電話號(hào)碼:  "<<endl;
	cin>>num;
	temp=Find(n,root);
	temp->data.mobileNumber=num;
   }
	else if(w==4)
   {
	   	cout<<"請(qǐng)輸入改后的郵件:  "<<endl;
	cin>>num;
	temp=Find(n,root);
	temp->data.email=num;
   }
	}

}
//****************************************************************
Tele AVLTree::Delete(AVLNode* &T,Tele e)
{
	//刪除結(jié)點(diǎn)
	AVLNode* p,*q;
	e=RefValue;
	p=T;
	if(T->right==NULL) {//右子數(shù)為空需要重接它的左子數(shù)
	    T=T->left;
		free(p);
		shorter=true;
		}
	else if(T->left==NULL) {//重接它的右子數(shù)
		T=T->right;
		free(p);
		shorter=true;
		}
		else{ //左右子數(shù)均不空
			q=T->left;
			while(q->right!=NULL){//轉(zhuǎn)左,然后向右到盡頭
							q=q->right;
						}
			e=q->data;
			}
		return e;
}
//********************************************************************

void AVLTree::Delete_Rightbalance(AVLNode* &T,int& shorter)
{
	if (T->right!=NULL)
	{
	///////////刪除在左子樹上的,相當(dāng)于插入在右子樹
	AVLNode* rc=T->right,*ld;
	switch(rc->balance){
	case 1://///////雙旋 ,先右旋后左旋
		ld=rc->left;
		rc->left=ld->right;
		ld->right=rc;
		T->right=rc->left;
		rc->left=T;
		switch(ld->balance)	{
				case 1:T->balance=0;
						rc->balance=-1;	
						break;
				case 0:T->balance=rc->balance=0;
						break;
				case -1:T->balance=1;
						rc->balance=0;
						break;
				}
		ld->balance=0;
		T=rc;
		shorter=true;break;
	case 0:///////刪除在左子樹,相當(dāng)于插入在右子樹,左單旋
		T->right=rc->left;
		rc->left=T;
		rc->balance=1;
		T->balance=-1;
		T=rc;
		shorter=0;break;
	case -1:///////刪除在左子樹,相當(dāng)于插入在右子樹,左單旋
		T->right=rc->left;
		rc->left=T;
		rc->balance=T->balance=0;
		T=rc;
		shorter=true;break;
	}
	}
	//else Delete(T,T->data);

}



void AVLTree::Delete_Leftbalance(AVLNode* &T,int &shorter)/////刪除右子樹上的,相當(dāng)于插入在左子樹上
{
		AVLNode* p1,*p2;
			if (T->left!=NULL)
	{
		p1=T->left;
		switch(p1->balance) 	{
				case 1:T->left=p1->right;//////右旋
					p1->right=T;
					p1->balance=T->balance=0;
					T=p1;	
					shorter=true;
					break;
				case 0:T->left=p1->right;///////右旋
						p1->right=T;
						p1->balance=-1;
						T->balance=1;
						T=p1;
						shorter=false;
						break;
				case -1:p2=p1->right;//////////右雙旋
						p1->right=p2->left;
						p2->left=p1;
						T->left=p2->right;
						p2->right=T;
						switch(p2->balance){
											case 1:T->balance=-1;p1->balance=0;break;
											case 0:T->balance=0;p1->balance=0;break;
											case -1:T->balance=0;p1->balance=1;break;
										}
				p2->balance=0;
				T=p2;
			shorter=true;break;
			} 
			}
			//else Delete(T,T->data);

}
//****************************************************************************************
void AVLTree::DeleteAVL(AVLNode* &T,Tele e)
{
	//刪除后要保證該二叉樹還是平衡的
	Tele n,m;/////標(biāo)記
	m=RefValue;
	AVLNode* q;
	if(!T) T=NULL;
	else	{
		if(e.name==T->data.name)	{////直接刪除
			n=Delete(T,e);
			m=n;
			if(m.name!=RefValue.name) {
				q=T;
				DeleteAVL(T,m);
				q->data=m;}	
		}
		else {
					if(e.name<T->data.name){////在左子樹上尋找
							DeleteAVL(T->left,e);
							if(shorter){
									switch(T->balance){
														case 1:T->balance=0;shorter=true;break;
														case 0:T->balance=-1;shorter=false;break;
														case -1:shorter=true;Delete_Rightbalance(T,shorter);break;
												}////switch(T->bf)
											}/////if(shorter)
									}/////if(e<T->data)
					else{ /////////在右子樹上尋找
					DeleteAVL(T->right,e);
					if(shorter)
						switch(T->balance){
												case 1:shorter=true;Delete_Leftbalance(T,shorter);break;
												case 0:T->balance=1;shorter=false;break;
												case -1:T->balance=0;shorter=true;break;
										}////////switch(T->bf)
						}////////在右子數(shù)上尋找完
				}////////在左右子上完
		}///////////刪除完
//return T;
}
//*********************************************************************************************

 int main()
 {
	 string t,ss,c;
	 // AVLTree<Tele> jiang;
	 AVLTree jiang;
	  //ofstream out;
	  //out.open ("jj.txt");
	  ifstream in;
		  Tele tl,z;
	
	 in.open("shan.txt");
	 //int k=0;
	 while(!in.eof())
	{
		//k++;
		in>>tl.name;
		in>>tl.phoneNumber;
		in>>tl.mobileNumber;
		in>>tl.email;
		jiang.Insert(tl);
	}


	 
    int userChoseMenu;
    while (userChoseMenu = PrintMenu()) 
    {
        //根據(jù)用戶不同選擇作出不同處理
        switch (userChoseMenu)
        {
            case 1 : 
                cout << "你選擇了1,請(qǐng)輸入你要查找的姓名:" << endl;
                //root = BuildTree(root);
				cin>>ss;
              jiang.find(ss,jiang.root);
                break;
            case 2 :
                cout << "你選擇了2,請(qǐng)輸入要插入信息;" << endl;
				cout <<"請(qǐng)輸入姓名: "<<endl;
                 cin>>z.name;
				cout<<"請(qǐng)輸入固定電話號(hào)碼: "<<endl;
				cin>>z.phoneNumber;
				cout<<"請(qǐng)輸入移動(dòng)電話號(hào)碼: "<<endl;
				cin>>z.mobileNumber;
				cout<<"請(qǐng)輸入電子郵件: "<<endl;
				cin>>z.email;
		  //in.read(z.name,2);//>>z.phoneNumber>>z.mobileNumber>>z.email;
					//root = InsertAVL(root,e);
		            jiang.Insert(z);
                break;
            case 3 :
                cout << "你選擇了3,請(qǐng)輸入要?jiǎng)h除的姓名:" << endl;
				//cout<<"delete!"<<endl;
				cin>>z.name;
				jiang.DeleteAVL(jiang.root,z);
			//	root = DeleteAVL(root,e);
                break;
            case 4 :
                cout << "你選擇了4,請(qǐng)輸入要修改人的姓名:" << endl;
				cin>>c;
			    jiang.change(c);
				//jiang.Insert
                break;
            case 5 :
                cout << "你選擇了5,程序?qū)⑼顺觥?quot; << endl;
				exit(0);
                break;
            default :
                cout << "無效選擇,程序?qū)⑼顺觥?quot; << endl;
				exit(0);
                break;
        }
    }

	 return 0;
 }



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美在线观看| 久久疯狂做爰流白浆xx| 亚洲另类在线制服丝袜| 国产精品视频一二| 国产精品久久一级| 国产精品伦理在线| 亚洲欧洲日本在线| 亚洲女与黑人做爰| 亚洲亚洲人成综合网络| 爽爽淫人综合网网站| 视频一区欧美精品| 麻豆免费看一区二区三区| 久久99国产精品久久99果冻传媒| 精品一二三四在线| 国产69精品久久99不卡| 成人午夜激情影院| 一本久久综合亚洲鲁鲁五月天| 色综合网色综合| 欧美日韩国产高清一区| 欧美精品乱人伦久久久久久| 日韩一本二本av| 国产喷白浆一区二区三区| 亚洲人成精品久久久久| 亚洲午夜精品网| 精品在线免费观看| 波波电影院一区二区三区| 色综合久久久久久久久| 制服丝袜中文字幕一区| 久久婷婷国产综合国色天香| 国产精品毛片大码女人| 亚洲成人精品在线观看| 麻豆高清免费国产一区| 成人精品在线视频观看| 欧美色倩网站大全免费| 久久综合一区二区| 亚洲久本草在线中文字幕| 日韩主播视频在线| 国产精品一区二区x88av| 色诱视频网站一区| 精品999在线播放| 亚洲欧美日韩一区二区| 蜜臀a∨国产成人精品| 成人av网站免费观看| 欧美猛男男办公室激情| 国产欧美精品国产国产专区| 亚洲五码中文字幕| 国产91精品免费| 在线电影国产精品| 亚洲视频狠狠干| 极品美女销魂一区二区三区免费| 91麻豆国产自产在线观看| 日韩一本二本av| 亚洲美女电影在线| 激情六月婷婷久久| 欧美色网站导航| 国产精品色呦呦| 久久99热狠狠色一区二区| 日本高清无吗v一区| 精品国产91九色蝌蚪| 亚洲国产成人tv| www.成人网.com| 久久久噜噜噜久久人人看| 午夜精品国产更新| 色av一区二区| 国产精品成人在线观看| 国产一区二区三区美女| 91麻豆精品国产91久久久久| 亚洲美女视频在线| 成人激情图片网| 久久综合色鬼综合色| 日日摸夜夜添夜夜添国产精品| 99久久精品一区| 中文字幕免费观看一区| 国产真实乱对白精彩久久| 欧美一区午夜视频在线观看| 一区二区三区成人| 9人人澡人人爽人人精品| 久久综合999| 久久av中文字幕片| 51精品秘密在线观看| 亚洲一区二区在线视频| 91猫先生在线| 国产精品激情偷乱一区二区∴| 国产盗摄视频一区二区三区| 精品91自产拍在线观看一区| 丝袜美腿亚洲一区| 国产在线播精品第三| 精品久久久久久久一区二区蜜臀| 日韩综合小视频| 欧美妇女性影城| 丝袜亚洲精品中文字幕一区| 欧美日韩一区二区三区在线| 亚洲男人的天堂在线aⅴ视频| 波多野结衣精品在线| 国产精品电影院| 97成人超碰视| 亚洲日本青草视频在线怡红院 | 欧美日韩国产首页| 亚洲一区在线看| 欧美日韩精品高清| 日韩一区欧美二区| 欧美日韩电影在线| 日本麻豆一区二区三区视频| 日韩一级二级三级| 韩国毛片一区二区三区| 2023国产精品自拍| 国产成人8x视频一区二区| 国产精品私人自拍| 色婷婷av一区二区三区gif| 一区二区三区精品在线| 欧美日韩一级二级| 日韩二区三区在线观看| 欧美v日韩v国产v| 国产99久久精品| 国产精品乱码人人做人人爱| aa级大片欧美| 亚洲韩国精品一区| 日韩一区二区三区视频在线观看| 九一九一国产精品| 中文字幕乱码亚洲精品一区| 99re免费视频精品全部| 亚洲大片在线观看| 精品久久免费看| voyeur盗摄精品| 亚洲国产一区二区三区| 日韩三级在线免费观看| 国产一区二区在线观看免费| 中文字幕国产一区| 在线观看国产精品网站| 玖玖九九国产精品| 中文成人综合网| 91精品国产高清一区二区三区 | 久久国产日韩欧美精品| 欧美国产一区视频在线观看| 色婷婷亚洲一区二区三区| 日本伊人午夜精品| 欧美国产日产图区| 欧美日本乱大交xxxxx| 国产精品一区二区在线看| 悠悠色在线精品| 日韩精品一区在线观看| 99久久综合精品| 日韩二区在线观看| 国产精品你懂的在线| 6080午夜不卡| 不卡视频一二三四| 日韩avvvv在线播放| 国产精品理论在线观看| 在线不卡免费av| 成人av资源在线| 日本不卡一区二区三区高清视频| 国产精品三级av| 日韩一区二区三区三四区视频在线观看| 国产成人精品免费一区二区| 天堂在线亚洲视频| 国产精品二三区| 精品国精品自拍自在线| 在线视频中文字幕一区二区| 国产乱国产乱300精品| 亚洲va天堂va国产va久| 国产精品色一区二区三区| 91精品国产美女浴室洗澡无遮挡| 成人v精品蜜桃久久一区| 免费不卡在线视频| 一区二区三区中文免费| 国产欧美久久久精品影院| 欧美裸体bbwbbwbbw| 91色婷婷久久久久合中文| 麻豆精品视频在线观看免费| 亚洲一级电影视频| 亚洲欧洲色图综合| 久久精品一级爱片| 欧美一级国产精品| 欧美日韩一区在线| 99久久婷婷国产综合精品| 国产一区二区在线免费观看| 日本免费新一区视频| 亚洲一本大道在线| 亚洲精选视频免费看| 国产精品污网站| 国产女主播一区| 久久综合色8888| 精品久久人人做人人爰| 91精品福利在线一区二区三区| 日本久久一区二区三区| 99久久亚洲一区二区三区青草| 国产精品系列在线观看| 精品一区中文字幕| 午夜私人影院久久久久| 一区二区三区视频在线观看| 国产精品免费视频网站| 亚洲国产高清aⅴ视频| 国产丝袜在线精品| 国产亲近乱来精品视频 | 午夜视频在线观看一区二区三区 | 国产伦精一区二区三区| 狠狠色丁香久久婷婷综合丁香| 免费在线观看成人| 蜜臀久久久久久久| 日本视频一区二区|