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

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

?? avlnode.h

?? 這是一個銀行賬戶的管理程序
?? H
字號:
//this is avl tree node 
#include "Item.h"
#include<stdio.h>
#include<iostream.h>
#include<iomanip.h>

class avlNode//平衡二叉樹結點類
{
	public:
		avlNode(Index val);//構造函數
		void release();//析構用函數								
		int add(avlNode* &p,Index val);//插入一個值;返回新的avl樹的根結點的指針
		void preorderview(avlNode *current,int i=-1);//前序周游
		avlNode* remove(Index val,avlNode* &waste,int &flag);//刪除以當前結點的為根的avl樹中的val結點
		avlNode* findNodeValue(Index val);//查找val結點
		Index value;//碼值

		int bf;// balance factor
		avlNode * leftptr;//左右指針
		avlNode * rightptr;
		avlNode * removeLeftmostElement(avlNode* &childptr,int &flag);//找到最左的結點
		avlNode * LL_singleRotation();//在插入時候左子樹LL失衡的時候調整,返回新的樹根的指針
		avlNode * RR_singleRotation();//在插入時候右子樹RR失衡的時候調整,返回新的樹根的指針
		avlNode * LR_doubleRotation();//在插入時候左子樹LR失衡的時候調整,返回新的樹根的指針
		avlNode * RL_doubleRotation();//在插入時候右子樹RL失衡的時候調整,返回新的樹根的指針
	
};


avlNode::avlNode(Index val)
{
	value=val;
	leftptr=NULL;
	rightptr=NULL;
	bf=0;
}


void avlNode::release()
{
	if (leftptr)
	{//刪除左子樹中的結點
		leftptr->release();//遞歸調用
		delete leftptr;
		leftptr=0;
	}
	if (rightptr)
	{//刪除右子樹中的結點
		rightptr->release();//遞歸調用
		delete rightptr;
		rightptr=0;
	}
}


int avlNode::add(avlNode* &rp,Index val)
{//返回值表明以當前結點為根的樹是否再插入之后增高,0:非增高,非0:增高
	if (val.account <value.account)
	{//左子樹插入
		if (rp->leftptr==NULL)
			rp->leftptr=new avlNode(val);
		else if(rp->leftptr->add(rp->leftptr,val)==0)//插入后子樹沒有增高
			return 0;
		if (rp->bf==-1)
		{//原來已經傾斜,左邊失衡,需要做平衡處理
	       if (rp->leftptr->bf<0)  //插入在左側,單旋轉
	             rp = LL_singleRotation();
	       else rp = LR_doubleRotation();	//插入在右側,雙旋轉
		   return 0;
		}
		return --bf;   // bf=(0, +1)的情況,不需要調整樹,只要修改bf
	}
	else
	{
		if (rp->rightptr==NULL)
			rp->rightptr=new avlNode(val);
		else if (rp->rightptr->add(rp->rightptr,val)==0)//插入后子樹沒有增高 
			return 0;
		if(rp->bf==1)
		{//原來已經傾斜,需要做平衡處理
	       if (rp->rightptr->bf>0)    //插入在右側,單旋轉
	           rp = RR_singleRotation();
	       else rp = RL_doubleRotation();  //插入點在右側.雙旋轉
		   return 0;
		}
		return ++bf; // bf=(0, -1)的情況,不需要調整樹,只要修改bf
	}
}


avlNode* avlNode::remove(Index val,avlNode* &waste,int &flag)
{
	if (val.account==value.account)
	{
		waste=this;
		//當沒有右子樹的時候返回左子樹
		if(rightptr==NULL)
		{
			flag=1;
			return leftptr;
		}
		//刪除右子樹中的最小結點
		int oldbf=rightptr->bf;
		avlNode* newroot;
		rightptr=rightptr->removeLeftmostElement(newroot,flag);//找到后返回已經平衡的avl樹的根指針
		newroot->leftptr=leftptr;
		newroot->rightptr=rightptr;
		if((flag==1)&&(bf==1))
			flag=1;
		else flag=0;
		if(flag==1)
		{
			newroot->bf=bf--;
		}
		else newroot->bf=bf;
        //左樹的平衡
		avlNode* rightchild=newroot->rightptr;
	    if (rightchild==NULL) 
		    bf--;
	    else if((rightchild->bf!=oldbf)&&(rightchild->bf==0))
		    bf--;
    	if (bf<-1)
		{
		    int newoldbf=newroot->leftptr->bf;
	        if (newoldbf>0)
			{//雙旋轉
    	       return newroot->LR_doubleRotation();
			}
	        else
			{//單旋轉
		       return newroot->LL_singleRotation();
           	}
		}
	    return newroot;
		
	}
	else if(val.account<value.account)
	{//從左子樹中刪除
		if(leftptr==NULL)
			return this;
		//執行刪除
		int oldbf=leftptr->bf;
		leftptr=leftptr->remove(val,waste,flag);//遞歸調用
        //調整左子樹
        avlNode* leftchild=leftptr;
	    //計算刪除后的子樹對當前的根結點的平衡因子的影響
	    if (leftchild==NULL)
		   bf++;
	    else if((leftchild->bf!=oldbf)&&(leftchild->bf==0))
		   bf++;
	    if (bf>1)//失衡
		{//調整
		   int newoldbf=rightptr->bf;
	       if (newoldbf<0)//雙旋轉
		   {
	           return RL_doubleRotation();
		   }
	       else
		   {//單旋轉
		       avlNode* temp= RR_singleRotation();
			   if(flag==1)
				   bf++;
			   return temp;
		   }
		}
    	return this;
	}
	else
	{//從右子樹中刪除
		if(rightptr==NULL)
			return this;
		//執行刪除
		int oldbf=rightptr->bf;
		rightptr=rightptr->remove(val,waste,flag);//遞歸調用
		//調整右子樹
		avlNode* rightchild=rightptr;
    	if (rightchild==NULL) 
		  bf--;
	    else if((rightchild->bf!=oldbf)&&(rightchild->bf==0))
		  bf--;
	    if (bf<-1)
		{
		  int newoldbf=leftptr->bf;
	      if (newoldbf>0)
		  {//雙旋轉
    	      return LR_doubleRotation();
		  }
	      else
		  {//單旋轉
			  avlNode* temp= LL_singleRotation();
			  if(flag==1)
			    bf--;
			   return temp;
		   }
		} 
	    return this;
	}
}

avlNode* avlNode::removeLeftmostElement(avlNode* &childptr,int &flag)
{//flag 表示子樹高度是否變化
	avlNode* leftchild=leftptr;
	//找到最小的值,返回,否則遞歸調用
	if (leftchild==NULL)
	{
		childptr=this;
		flag=1;
		return rightptr;
	}
	int oldbf=leftchild->bf;
	leftptr=leftchild->removeLeftmostElement(childptr,flag);//遞歸調用
	//調整左子樹平衡
	avlNode* newleftchild=leftptr;
	//計算刪除后的子樹的高度變化
	if((newleftchild==NULL)&&(rightptr==NULL))
		flag=1;
	//計算刪除后的子樹對當前的根結點的平衡因子的影響
	if (newleftchild==NULL)
		bf++;
	else if((newleftchild->bf!=oldbf)&&(newleftchild->bf==0))
		bf++;
	if (bf>1)//失衡
	{//調整
		int newoldbf=rightptr->bf;
	    if (newoldbf<0)//雙旋轉
		{
	       return RL_doubleRotation();
		}
	    else
		{//單旋轉
		   return RR_singleRotation();
		}
	}
	return this;
}


avlNode* avlNode::findNodeValue(Index val)
{
	if (val.account==value.account)
	{
		return this;
	}
	else if (val.account>value.account)
	{//大于的話在右子樹中查找
		if (rightptr!=NULL)
			return rightptr->findNodeValue(val);//遞歸調用
		else 
			return NULL;
	}
	else
	{//小于的話在左子樹中查找
		if (leftptr!=NULL)			
			return leftptr->findNodeValue(val);//遞歸調用
		else
			return NULL;
	}
}
void avlNode::preorderview(avlNode *current,int i)
{
	i++;//層計數器
	if (current)
	{
		cout<<setw(8)<<current->value.account<<setw(10)<<current->bf<<" "<<setw(6)<<i<<endl;
		preorderview(current->leftptr,i);//遞歸調用
		preorderview(current->rightptr,i);//遞歸調用
	}
}

avlNode* avlNode::LL_singleRotation()
{
	avlNode *p;
	p=leftptr;
	leftptr=p->rightptr;
	bf=0;
	p->rightptr=this;
    if(p->bf==0)
	  p->bf=1;
	else p->bf=0;
	return p;
}

avlNode* avlNode::LR_doubleRotation()
{
	avlNode *p,*q;
	q=leftptr;
	p=q->rightptr;
	q->rightptr=p->leftptr;
	leftptr=p->rightptr;
	p->leftptr=q;
	bf=q->bf=0;
	if(p->bf==-1) bf=1;
	if(p->bf==1) q->bf=-1;
	p->rightptr=this;
	p->bf=0;
	return p;
}

avlNode* avlNode::RR_singleRotation()
{
	avlNode *p;
	p=rightptr;
	rightptr=p->leftptr;
	bf=0;
	p->leftptr=this;
    if(p->bf==0) 
	  p->bf=-1;
	else p->bf=0;
	return p;
}

avlNode* avlNode::RL_doubleRotation()
{
	avlNode *p,*q;
	q=rightptr;
	p=q->leftptr;
	q->leftptr=p->rightptr;
	rightptr=p->leftptr;
	p->rightptr=q;
	bf=q->bf=0;
	if(p->bf==-1) q->bf=1;
	if(p->bf==1) bf=-1;
	p->leftptr=this;
	p->bf=0;
	return p;
}

void InsertAccount(int acc)
{
	Item newuser;
	int pass1,pass2;
	cout<<"您的帳號是"<<endl;
	cout<<acc<<endl;
	cout<<"請輸入您的密碼"<<endl;
	cin>>pass1;
	bool flag=false;
	while(flag==false)
	{
		cout<<"請確認,再次輸入您的密碼"<<endl;
		cin>>pass2;
		if(pass1==pass2)
		{
			newuser.password=pass1;
			flag=true;
		}
		else
			cout<<"密碼不匹配,請重新輸入"<<endl;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区福利在线| 国产精品视频观看| 成人免费观看av| 日韩va亚洲va欧美va久久| 欧美国产一区二区在线观看| 欧美精三区欧美精三区| 99视频精品全部免费在线| 麻豆一区二区三区| 性欧美大战久久久久久久久| 亚洲欧美视频一区| 欧美一二三区精品| 欧美福利一区二区| 欧美日韩激情一区二区| 欧美日韩综合色| 在线免费不卡电影| 色综合久久精品| 99国产欧美另类久久久精品| 国产盗摄视频一区二区三区| 国产精品久久久久影院老司 | 综合激情网...| 亚洲天堂av老司机| 日韩毛片一二三区| 亚洲欧美日韩国产另类专区| 中文字幕亚洲欧美在线不卡| 国产精品久久三| 亚洲柠檬福利资源导航| 亚洲人成网站精品片在线观看| 国产一区视频导航| 国产mv日韩mv欧美| 91在线一区二区三区| 日韩欧美一区二区免费| 日韩一级黄色片| 亚洲欧洲美洲综合色网| 天天操天天干天天综合网| 欧美中文字幕一二三区视频| 91官网在线观看| 日本一区二区三区在线不卡| 精品午夜久久福利影院| 在线视频欧美精品| 亚洲乱码国产乱码精品精可以看 | 亚洲与欧洲av电影| 午夜精品久久久久久久| 久久成人综合网| 99久久精品国产导航| 91视频在线观看| 欧美日本一区二区三区四区| 日韩欧美在线网站| 欧美国产综合一区二区| 亚洲视频免费观看| 青椒成人免费视频| 国产suv精品一区二区883| 在线免费观看不卡av| 欧美大片拔萝卜| 亚洲素人一区二区| 日产精品久久久久久久性色| 国产69精品久久777的优势| 91搞黄在线观看| 欧美电影免费观看高清完整版 | 欧美一区日韩一区| 久久久亚洲午夜电影| 激情文学综合丁香| 欧美成人a∨高清免费观看| 久久福利视频一区二区| 欧美一级高清大全免费观看| 亚洲最大成人综合| 欧美日韩另类一区| 玉足女爽爽91| 99精品欧美一区| 《视频一区视频二区| 99在线热播精品免费| 国产精品国产三级国产a | 国产成人av福利| 欧美国产激情一区二区三区蜜月| 精品在线免费视频| 久久青草国产手机看片福利盒子| 老司机免费视频一区二区| 日韩欧美中文字幕公布| 国产一区日韩二区欧美三区| 久久精子c满五个校花| 成人禁用看黄a在线| 一区二区三区不卡视频 | 自拍偷拍欧美激情| 欧美性xxxxxx少妇| 美女视频黄a大片欧美| 精品国产乱子伦一区| 丁香婷婷综合五月| 亚洲最新视频在线观看| 欧美高清视频www夜色资源网| 国产成人啪午夜精品网站男同| 亚洲天堂成人在线观看| 欧美大尺度电影在线| 91视频免费观看| 国产一区在线观看视频| 亚洲高清一区二区三区| 国产精品久久久久久久久久久免费看 | 午夜精品福利一区二区三区蜜桃| 国产精品伦理一区二区| 中文欧美字幕免费| 亚洲日本成人在线观看| 国产精品久久久久永久免费观看| 欧美欧美欧美欧美| 一本大道久久a久久精品综合| 国产综合色在线| 亚洲高清免费在线| 一区二区三区免费看视频| 久久久噜噜噜久久人人看 | 亚洲精品国产无天堂网2021| 精品国产免费久久| 欧美日韩在线一区二区| 91黄色激情网站| 日本国产一区二区| 99re66热这里只有精品3直播| 国产成人精品免费在线| 国产精品一级片在线观看| 国产一区二区福利视频| 久久超碰97中文字幕| 蜜臀91精品一区二区三区| 日韩国产精品大片| 老司机免费视频一区二区| 久久国产精品99久久久久久老狼 | 亚洲欧美一区二区三区孕妇| 成人欧美一区二区三区白人| 综合中文字幕亚洲| 一区二区三区欧美激情| 日韩精品一区第一页| 日韩国产高清影视| 国模套图日韩精品一区二区| av高清不卡在线| 在线视频国内自拍亚洲视频| 777奇米四色成人影色区| 欧美成人福利视频| 亚洲三级久久久| 日本欧美在线看| eeuss影院一区二区三区| 色网站国产精品| 精品理论电影在线观看| 国产婷婷色一区二区三区四区| 久久欧美一区二区| 亚洲欧美色一区| 久久精品国产一区二区三区免费看| 久久精品国产亚洲高清剧情介绍 | 色欲综合视频天天天| 欧美精品tushy高清| 国产亚洲精品免费| 亚洲第一主播视频| jiyouzz国产精品久久| 欧美精品一二三区| 1区2区3区精品视频| 捆绑变态av一区二区三区| 91丨九色丨蝌蚪丨老版| 欧美成人激情免费网| 亚洲成人av福利| 波多野结衣视频一区| 久久综合av免费| 日韩精品免费专区| 欧美无砖专区一中文字| 亚洲色欲色欲www| 国产美女娇喘av呻吟久久| 欧美日韩精品一区二区三区四区 | 色综合久久久久综合体| 26uuu另类欧美亚洲曰本| 日韩电影网1区2区| 91精选在线观看| 图片区小说区区亚洲影院| 欧美丝袜丝nylons| 三级在线观看一区二区| 欧美性视频一区二区三区| 欧美激情一区三区| 国产高清精品久久久久| 精品少妇一区二区三区在线播放 | 一区二区三区小说| 欧美一级日韩一级| 成人免费看视频| 日韩av电影免费观看高清完整版 | 国产精品理论片在线观看| 一本色道综合亚洲| 人人精品人人爱| 综合网在线视频| 亚洲精品一区二区三区影院| 91久久线看在观草草青青| 亚洲欧美另类小说| 91蜜桃免费观看视频| 亚洲伦理在线免费看| 欧美三级中文字幕| 久久国产精品第一页| 中文字幕国产精品一区二区| 色综合久久中文综合久久97| 亚洲一区欧美一区| 91高清视频免费看| 天天操天天综合网| 国产精品嫩草久久久久| 色噜噜狠狠色综合中国| 日韩成人av影视| 国产精品国产自产拍在线| 欧美三电影在线| 国产精品1区2区3区| 亚洲国产精品尤物yw在线观看| 精品国产乱码久久久久久闺蜜 | 日韩三区在线观看| 99麻豆久久久国产精品免费|