亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日本高清不卡在线观看| 久久精品一区八戒影视| 日韩欧美一区电影| 国产视频一区二区在线| 天天综合色天天综合色h| 成人在线一区二区三区| 欧美日韩亚洲另类| 亚洲色图在线播放| 国产乱人伦偷精品视频不卡| 欧美日韩国产精选| 亚洲欧美国产高清| 成人aa视频在线观看| 欧美大尺度电影在线| 亚洲成人一区在线| 91蜜桃在线观看| 欧美激情综合在线| 国产伦精品一区二区三区视频青涩 | 欧美日韩视频不卡| 国产精品每日更新在线播放网址| 紧缚奴在线一区二区三区| 欧美美女直播网站| 亚洲午夜免费视频| 99精品在线免费| 国产精品视频免费| 国产91在线看| 国产精品视频一二三区| 国产成人免费av在线| 国产网站一区二区| 粉嫩av亚洲一区二区图片| 国产日韩欧美综合一区| 国产真实乱子伦精品视频| 欧美成人乱码一区二区三区| 久久超碰97人人做人人爱| 精品日韩在线一区| 久久超级碰视频| 久久久一区二区三区捆绑**| 国产麻豆午夜三级精品| 国产精品婷婷午夜在线观看| 高清在线不卡av| 亚洲三级小视频| www.亚洲在线| 亚洲精品久久久蜜桃| 在线精品国精品国产尤物884a| 悠悠色在线精品| 91精品久久久久久久91蜜桃| 狠狠色狠狠色合久久伊人| 日韩欧美激情一区| 国产成人精品在线看| 亚洲丝袜自拍清纯另类| 欧美日韩五月天| 久久激情五月激情| 国产校园另类小说区| 色婷婷精品久久二区二区蜜臀av| 亚洲午夜激情av| 日韩美女视频在线| 成人深夜福利app| 亚洲成人精品一区二区| 91精品一区二区三区久久久久久| 久久99日本精品| 中文字幕在线免费不卡| 欧美精品123区| 国产成人av网站| 亚洲最新在线观看| 精品国产乱码久久久久久影片| 风间由美性色一区二区三区| 亚洲一区二区三区中文字幕| 精品国产乱码久久久久久牛牛| 99久久久国产精品| 美国精品在线观看| 亚洲三级视频在线观看| 精品国产乱码久久久久久图片 | 国产在线一区观看| 亚洲人快播电影网| 亚洲精品在线观看视频| 色婷婷综合久色| 国产一区二区不卡在线| 偷窥少妇高潮呻吟av久久免费| 久久久天堂av| 欧美一区二区免费视频| 97精品久久久久中文字幕| 国产一区二区剧情av在线| 亚洲永久免费av| 欧美国产禁国产网站cc| 91精品国产综合久久福利软件 | 欧美中文字幕不卡| 国产精品1区2区| 日韩国产在线一| 亚洲欧美另类小说| 国产精品网曝门| 久久精品夜色噜噜亚洲a∨| 欧美高清视频www夜色资源网| 成人av网址在线观看| 激情综合五月天| 日本vs亚洲vs韩国一区三区二区| 亚洲一卡二卡三卡四卡无卡久久 | xfplay精品久久| 欧美日韩国产首页| 欧美性做爰猛烈叫床潮| 99国产精品99久久久久久| 国产精品亚洲午夜一区二区三区 | 成人美女视频在线观看| 国产一区二区女| 美国精品在线观看| 免费人成精品欧美精品| 亚洲成人激情社区| 婷婷久久综合九色国产成人| 亚洲主播在线播放| 亚洲无线码一区二区三区| 亚洲精品久久7777| 一区二区三区丝袜| 一区二区视频在线看| 中文字幕日韩一区| 中文字幕中文字幕一区二区| 国产人久久人人人人爽| 国产亚洲精久久久久久| 中文字幕精品三区| 中文字幕亚洲一区二区va在线| 国产精品沙发午睡系列990531| 国产精品久久看| 亚洲日本欧美天堂| 一区二区三区在线观看动漫| 一区二区三区久久久| 亚洲v中文字幕| 毛片基地黄久久久久久天堂| 卡一卡二国产精品| 国产成人在线免费观看| www.亚洲人| 在线视频国内自拍亚洲视频| 欧美日韩一区二区三区视频| 欧美电影在哪看比较好| 欧美精品一区二区高清在线观看| 国产亚洲欧美日韩俺去了| 国产精品美女久久久久久久久久久 | 久久国产精品72免费观看| 国产高清精品网站| 色综合色狠狠综合色| 欧美日韩国产经典色站一区二区三区| 337p亚洲精品色噜噜狠狠| 精品国产制服丝袜高跟| 中文字幕免费不卡在线| 一区二区在线看| 久久国产精品99久久久久久老狼| 成人黄页在线观看| 欧美在线免费观看视频| 精品国产伦一区二区三区观看体验| 国产欧美日产一区| 亚洲成在线观看| 国产成人鲁色资源国产91色综| 日本福利一区二区| 精品国产凹凸成av人网站| 中文字幕日韩欧美一区二区三区| 视频在线观看91| 成人免费毛片片v| 7799精品视频| 综合欧美一区二区三区| 毛片不卡一区二区| 色琪琪一区二区三区亚洲区| 欧美不卡视频一区| 一区二区三区蜜桃网| 久久99精品网久久| 欧美视频日韩视频| 中文字幕第一页久久| 日韩av电影免费观看高清完整版 | xvideos.蜜桃一区二区| 一区二区三区四区亚洲| 国产精品一区在线观看乱码| 欧美日韩国产精选| 一区在线中文字幕| 国产一区二区在线观看免费| 欧美日韩在线三级| 日韩一区中文字幕| 国产成人精品免费看| 日韩视频123| 视频在线观看一区二区三区| 色婷婷综合久久久| 国产精品免费视频一区| 国产资源在线一区| 欧美一区二区高清| 亚洲自拍偷拍九九九| 成人美女在线视频| 久久精品人人爽人人爽| 亚洲成av人片在www色猫咪| 91免费看视频| 亚洲视频一区二区在线| 成人一级视频在线观看| 日韩精品一区二区三区中文不卡| 亚洲午夜久久久久久久久久久| 91麻豆免费看片| 亚洲国产精品v| 国产成人三级在线观看| 久久亚洲一区二区三区四区| 久久精品国产一区二区| 欧美一区二区日韩| 免费人成在线不卡| 日韩精品中午字幕| 久久不见久久见免费视频7| 日韩欧美中文字幕制服| 美女视频免费一区| 日韩欧美国产系列| 国产乱码精品1区2区3区|