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

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

?? bitree.cpp

?? 一個多項式運算程序 實現多項式的加 減 乘除 乘方 積分 微分 混合運算 一個二叉樹運算程序 實現二叉樹的創建 復制 深度計算 和樹形顯示 一個哈夫曼算法的演示程序 實現對電文的編碼 編碼的輸出
?? CPP
字號:
#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>
#include<process.h>
#include<string.h>
#include<math.h>
#include<stdio.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define MAXSIZE 50
char f[80]={'\0'};


typedef struct BiTnode{
	char *data;
    struct BiTnode *lchild,*rchild;
	int layer;//給樹加上layer屬性方便輸出的格式控制
}BiTnode,*BiTree;

typedef struct stack{
	BiTree data;
	struct stack *next;
} stack,* linkstack;	

typedef struct stack1{
	float data;
	struct stack1 *next;
} stack1,* linkstack1;	

typedef struct {
    BiTree *elem;
	int front;
	int rear;
	int queuesize;
}Queue;
/**************************************************************/
void push(linkstack &S,BiTnode *e)
{   linkstack p;
	p=new stack;
	p->data=e;
	p->next=S;
	S=p;
}
/**************************************************************/
void push1(linkstack1 &S,float e)
{   linkstack1 p;
	p=new stack1;
	p->data=e;
	p->next=S;
	S=p;
}
/**************************************************************/
bool pop(linkstack &S,BiTnode* &e)
{
	linkstack p;
	if(S)
	{
		p=S;
		S=S->next;
		e=p->data;
		delete p;
		return TRUE;
	}
	else return ERROR;
}
/**************************************************************/
bool pop1(linkstack1 &S,float &e)
{
	linkstack1 p;
	if(S)
	{
		p=S;
		S=S->next;
		e=p->data;
		delete p;
		return TRUE;
	}
	else return ERROR;
}
/*		********************************************************************			*/
bool ISOP(char c)
{
	if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#')
		return TRUE;
	else return ERROR;
}
/*		********************************************************************			*/
bool IsNumber(char c)
{
	if(c>='0'&&c<='9')
		return TRUE;
		else return ERROR;
}
/*		********************************************************************			*/
char* GetNum(char* &p)
{
	char *floatnum=new char [20];
	int i=0;
    //floatnum[i]=*p;
	//i++;
	while(IsNumber(*(p+1))||*(p+1)=='.')
	{
		floatnum[i]=*p;
		p++;
		i++;
	}
	floatnum[i]=*p;
	floatnum[i+1]='\0';
	return floatnum;
}

/*		********************************************************************			*/
void ChartoNum(char *a,float &f1)
{// 將a數組中的字符型數變成浮點數f1
	f1=0;
	int flag=0,count=0;
	while(*a!='\0')
	{
		    if(*a=='.') flag=1;
			else 
			{
		      f1=f1*10+(*a)-'0';
			  if(flag==1) count++;//count 統計小數位 出現flag==1表明出現小數位
		      
			}
			a++;
	}

    f1=f1/(float)pow(10,count);




}
/*		********************************************************************			*/
int checktable(char b,char a)//b 是棧頂元素, a是新遇到的運算符,比較a b的優先級
{ 
	char table1[7]={'+','-','*','/','(',')','#'};
	int b1=0,a1=0;
	
	while(table1[b1]!=b)b1++;
	while(table1[a1]!=a)a1++;
	
	int table[7][7]={ 0,0,1,1,0,0,0,
                      0,0,1,1,0,0,0,
				   	  0,0,0,0,0,0,0,
					  0,0,0,0,0,0,0,
					  1,1,1,1,0,2,0,
					  1,1,1,1,2,0,0,
					  1,1,1,1,1,1,3}; //優先級s>=p就返回0,優先級s<p就返回1,左右括號相遇時就返回2,#和#相遇就返回3
	
	return (table[b1][a1]);
}

/*		********************************************************************			*/
void InitQueue(Queue &Q,int maxsize=MAXSIZE)
{
	Q.elem=new BiTree[maxsize];
	Q.queuesize=maxsize;
	Q.front=Q.rear=0;
}
/*		********************************************************************			*/
bool DeQueue(Queue &Q,BiTree &e)
{
	if(Q.front==Q.rear) return FALSE;
	e=Q.elem[Q.front];
	Q.front=(Q.front+1)%Q.queuesize;
	return TRUE;
}

/*		********************************************************************			*/
bool EnQueue(Queue &Q,BiTree e)
{  
	if((Q.rear+1)%Q.queuesize==Q.front)  return FALSE;
    Q.elem[Q.rear]=e;
	Q.rear=(Q.rear+1)%Q.queuesize;
    return TRUE;
}
    
/*		********************************************************************			*/
bool QueueEmpty(Queue Q)
{
	if(Q.front==Q.rear) return TRUE;
	else return FALSE;
}
/*		********************************************************************			*/
void printspace(int depth)
{   int i=depth;
	for(;i>0;i--)
	{
		cout<<" ";
	}
}
/*		********************************************************************			*/

void CreatBiT(BiTree &T)
{
    BiTnode *tempt[20]={NULL};//tempt中存放樹的節點
	BiTree a,b,c;
	int i=0,flag;
	char *p=f;//p 是指向計算式的指針 ch 接受字符 a&b是操作數 c是運算符。
	linkstack S_number=NULL,S_op=NULL;
    
	/*while((ch=getchar())!='#')
	{
		f[i]=ch;
		i++;
	}
	f[i]='#';//輸入算式*/

	tempt[0]=new BiTnode;
    tempt[0]->data=new char;//申請空間 并賦值
	tempt[0]->data[0]='#';
	push(S_op,tempt[0]);
	
    i=1;
	while(1)
	{


		if(IsNumber(*p)) 
		{
			tempt[i]=new BiTnode;
			tempt[i]->data=GetNum(p);
			tempt[i]->lchild=NULL;
			tempt[i]->rchild=NULL;
			push(S_number,tempt[i]);//若是 操作數入作操數棧
            i++;		
		}
	    else if(*p=='(') 
		{	tempt[i]=new BiTnode;
            tempt[i]->data=new char;
			tempt[i]->data[0]=*p;
			push(S_op,tempt[i]);
            i++;	     //左括號直接入棧
		}
		else if(ISOP(*p))
		{
			
			
			flag=checktable(S_op->data->data[0],*p);//判斷優先級
			while(flag==0)
			{
				pop(S_number,a);
			    pop(S_number,b);
				pop(S_op,c);
				T=c;
			    c->rchild=a;
				c->lchild=b;//棧頂優先級高于未入棧的 則建立樹
				push(S_number,c);

				flag=checktable(S_op->data->data[0],*p);
			}
			if(flag==1)
			{ 
				tempt[i]=new BiTnode;
				tempt[i]->data=new char;
			    tempt[i]->data[0]=*p;
			    push(S_op,tempt[i]);//棧頂優先級低于未入棧的 則入op棧
                i++;
			}		
			if(flag==2)
                pop(S_op,a);//括號相遇就消除之
            if(flag==3)
            return;



             
		}//else if
			   
		p++;
	}//while


	for(i=0;tempt[i]!=NULL;i++)
	{
		free (tempt[i]);//釋放臨時的輔助節點
	}
}
/*		********************************************************************			*/
void Operate(BiTree T,linkstack1 &Snum,float &result)
{//實現對二叉樹表達式的求值
    float f1,f2,f;
    if(T)
	{
		Operate(T->lchild,Snum,result);
        Operate(T->rchild,Snum,result);
		
		if(ISOP(T->data[0]))
		{
			pop1(Snum,f1);
			pop1(Snum,f2);
			switch(T->data[0])
			{
			case '+':
				{
					result=f1+f2;break;
				}
			case'-':
				{
					result=f2-f1;break;
				}
			case '*':
				{
					result=f1*f2;break;
				}
			case '/':
				{
					result=f2/f1;break;
				}
			default:
				{
					cout<<"算式不合法!\n";
					return;
				}
			}
              push1(Snum,result);
		}//if
		else 
		{
				ChartoNum(T->data,f);
			    push1(Snum,f);
		}
	}//if
}//operate

/*		********************************************************************			*/    
float Operate1(BiTree T)
{//實現對二叉樹表達式的求值
    float f1,f2,f;
	if(!T->lchild&&!T->rchild)
		{
				ChartoNum(T->data,f);
			    return f;
		}
    
	
	else{
		f1=Operate1(T->lchild);
        f2=Operate1(T->rchild);
		
		if(ISOP(T->data[0]))
		{
		
			switch(T->data[0])
			{
			case '+':
				{
					 return f1+f2;
				}
			case'-':
				{
					return f1-f2;
				}
			case '*':
				{
					return f1*f2;
				}
			case '/':
				{
					return f1/f2;
				}
			default:
				{
					cout<<"算式不合法!\n";
					return FALSE;
				}
			}
              
		}//if
	}//else
}//operate	
/*		********************************************************************			*/

void Operate2(BiTree T,float &result)
{//實現對二叉樹表達式的求值
    float f1,f2;
    if(T)
	{
		Operate2(T->lchild,f2);
        Operate2(T->rchild,f1);
		
		if(ISOP(T->data[0]))
		{
		
			switch(T->data[0])
			{
			case '+':
				{
					result=f1+f2;break;
				}
			case'-':
				{
					result=f2-f1;break;
				}
			case '*':
				{
					result=f1*f2;break;
				}
			case '/':
				{
					result=f2/f1;break;
				}
			default:
				{
					cout<<"算式不合法!\n";
					return;
				}
			}
   
		}//if
		else 
		{
				ChartoNum(T->data,result);
		}
	}//if
}//operate2
/*		********************************************************************			*/

void CreatBiT2(BiTree &T)
{
	char ch;


	cin>>ch;  //if here is getchar()  cannot opetate well why??
	if(ch=='#'){T=NULL;return;}
    
    else
	{
	T=new BiTnode;
	T->data=new char;
	T->data[0]=ch;
	cout<<"輸入"<<T->data[0]<<"左孩子\n";
    CreatBiT2(T->lchild); 
    cout<<"輸入"<<T->data[0]<<"右孩子\n";
    CreatBiT2(T->rchild); 
	}
}
/*		********************************************************************			*/
void BiTDepth(BiTree T,int &depth,int h)
{
	if(T==NULL) return;
	
	if(h>depth) depth=h;
    BiTDepth(T->lchild,depth,h+1);// must be ++h not h++!!
	BiTDepth(T->rchild,depth,h+1);
}
/*		********************************************************************			*/
void Show(BiTree T)
{
	Queue Q;
    BiTree e;
	int i=0;
	int depth=0,h=1,count=0,n=0;
	int prelayer=0;
	if(T==NULL) return;

	InitQueue(Q);
    EnQueue(Q,T);
	Q.elem[Q.front]->layer=1;//this is the first layer
    BiTDepth(T,depth,h);

	while(!QueueEmpty(Q))
	{

        DeQueue(Q,e);
		if(e->layer!=prelayer)  // if layer changed output space and return
		{
			cout<<"\n";
			printspace(depth--);
		}//print return
		prelayer=e->layer;

		if(e->lchild!=NULL)
		{
			EnQueue(Q,e->lchild);
            e->lchild->layer=e->layer+1;
		}
		if(e->rchild!=NULL)
		{
			EnQueue(Q,e->rchild);
			e->rchild->layer=e->layer+1;
		}
		i=0;
		while(e->data[i])
		{
			cout<<e->data[i];
		    i++;
		}
		cout<<" ";

	}
}
/*	 	********************************************************************			*/
void CopyTree(BiTree T,BiTree &T1)
{
	if(T==NULL) {T1=NULL;return;}

	T1=new BiTnode;
	T1->data=T->data;
    CopyTree(T->lchild,T1->lchild);
	CopyTree(T->rchild,T1->rchild);
}
/*		********************************************************************			*/
void DestoryTree(BiTree T)
{
	if(T){
		DestoryTree(T->lchild);
		DestoryTree(T->rchild);
		free(T);
	}
}//
/*		********************************************************************			*/
void Calcute(BiTree T,float &result)
{

	float f1,f2;
	if(T)
	{
		Calcute(T->lchild,f1);
       // if(T->lchild!=NULL)ChartoNum(T->lchild->data,f1);
        Calcute(T->rchild,f2);
	//	if(T->lchild!=NULL)ChartoNum(T->rchild->data,f2);
		
		if(T->lchild==NULL)
		{
		ChartoNum(T->data,result);
			ChartoNum(T->data,result);
		}

        else{


		  switch(T->data[0])
		  {
			
	     	case '+':{ result=f1+f2;break;}
	    	case '-':{result=f1-f2;break;}
	    	case '*':{result=f1*f2;break;}
            case '/':{result=f1/f2;break;}
		  }
		}

}
}
/*		********************************************************************			*/
void main()
{   int depth=0;
    int h=1,k;
	BiTree T=NULL,T1=NULL,TNUM=NULL;//T is tree T1 is its copy TNUM is tree for computing machine;
	float  result;
	linkstack1 Snum=NULL;

while(1)
{
	cout<<"-------------二叉樹計算器-------------\n"
		<<"1 創建二叉樹\n"
	    <<"2 復制二叉樹\n"
		<<"3 銷毀二叉樹\n"
		<<"4 求樹的深度\n"
		<<"5 樹形顯示二叉樹\n"
		<<"6 二叉樹實現的數值計算器,支持浮點數\n"
		<<"0 退出\n";

	
	cin>>k;
	switch(k)
	{
	case 1:
		{
		    cout<<"創建二叉樹請輸入根節點:\n";
			CreatBiT2(T);
			cout<<"創建二叉樹成功\n";
			break;
		}
	case 2:
		{   
			CopyTree(T,T1);
			cout<<"復制二叉樹成功\n";
			Show(T);Show(T1);
			break;
		}
	case 3:
		{
			DestoryTree(T);
			DestoryTree(T1);
			DestoryTree(TNUM);
            cout<<"銷毀二叉樹成功\n";
			break;
		}
	case 4:
		{
			BiTDepth(T,depth,h);
			cout<<"樹的深度是"<<depth<<"\n";
			break;

		}
	case 5:
		{
			cout<<"樹形顯示二叉樹如下:\n";
			Show(T);
			cout<<"\n";
			break;
		}

	 case 6:
		{
			  int i=0;
			  cout<<"請輸入算式,以'#'字符結束輸入:\n";
              cin>>f[i];
			  while(f[i]!='#')
			  {
				  i++;
		         cin>>f[i];
		         
			  }
	          //輸入算式
			  
	          CreatBiT(TNUM);
			  Operate2(TNUM,result);
			  //result=Operate1(TNUM);
			  cout<<result;

			  //Calcute(TNUM,result);
	          //Operate(TNUM,Snum,result);
			  cout<<"\n";
			  cout<<"運算結果:"<<result<<"\n";
			  cout<<"樹形顯示如下:\n";
              Show(TNUM);
			  cout<<"\n";
			  break;
   
	          
		}
	 case 0:
		 {
			 return;
		 }
    }//switch
}//while
}//main


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色呦呦网站一区| 成人高清av在线| 国产精品成人在线观看| 91久久精品日日躁夜夜躁欧美| 欧美系列亚洲系列| 亚洲成人自拍偷拍| 欧美日韩精品一区二区| 日本一道高清亚洲日美韩| 日韩亚洲欧美成人一区| 国产一区久久久| 中文字幕一区二区三区在线不卡 | 欧美日韩在线亚洲一区蜜芽| 午夜精品免费在线| 精品国产免费一区二区三区四区| 国内成人自拍视频| 国产精品高潮呻吟| 欧美人与性动xxxx| 极品美女销魂一区二区三区| 欧美区在线观看| 日韩你懂的在线观看| 91精品国产一区二区三区 | 国产v综合v亚洲欧| 亚洲日本在线天堂| 欧美久久高跟鞋激| 国产主播一区二区| 亚洲欧美日韩国产综合在线| 欧美一区二区三区在线观看| 国产99久久久国产精品潘金| 亚洲一区在线观看免费| 日韩欧美成人一区| 日本精品视频一区二区| 久久精品国产色蜜蜜麻豆| 国产精品国产三级国产aⅴ入口| 欧美日韩卡一卡二| 成人小视频免费在线观看| 亚洲制服丝袜av| 久久美女高清视频| 欧美日韩精品一区二区三区四区| 国产乱子伦一区二区三区国色天香 | 国产精品久久久久影院| 欧美疯狂做受xxxx富婆| av中文字幕在线不卡| 日本成人在线网站| 亚洲精选视频免费看| 精品国产第一区二区三区观看体验| 91丨九色丨国产丨porny| 激情成人综合网| 亚洲国产精品久久艾草纯爱| 中文字幕乱码日本亚洲一区二区 | 欧美美女视频在线观看| 不卡av电影在线播放| 六月丁香婷婷色狠狠久久| 亚洲精品乱码久久久久久日本蜜臀| 精品福利一二区| 欧美日韩aaaaa| 国产成人av电影| 国产一区二区三区四| 色欧美片视频在线观看在线视频| 一区二区在线观看av| 久久视频一区二区| 欧美一区二区三区色| 欧美亚洲免费在线一区| 91美女片黄在线| 成人h精品动漫一区二区三区| 韩国av一区二区| 日本不卡1234视频| 午夜一区二区三区在线观看| 亚洲综合激情网| 亚洲美女一区二区三区| 国产精品高清亚洲| 国产精品天干天干在观线| 久久人人97超碰com| 精品免费视频一区二区| 日韩美一区二区三区| 欧美日韩一级大片网址| 欧美在线高清视频| 91久久线看在观草草青青| 91看片淫黄大片一级在线观看| 波多野结衣中文字幕一区| 成人一区二区三区在线观看| 国产成人精品亚洲777人妖| 在线观看亚洲精品| 91麻豆蜜桃一区二区三区| 99热精品一区二区| 97精品电影院| 91黄色激情网站| 欧美在线视频日韩| 欧美久久久一区| 日韩一区二区视频| 亚洲精品在线电影| 国产欧美一区二区三区网站| 国产精品无人区| 综合久久给合久久狠狠狠97色| 日韩美女啊v在线免费观看| 亚洲欧美激情在线| 午夜影视日本亚洲欧洲精品| 免费日本视频一区| 国产精品中文字幕日韩精品| 波多野结衣精品在线| 日本高清不卡视频| 欧美乱妇23p| 精品国产一区二区三区忘忧草| 久久精品一区二区三区不卡| 亚洲图片你懂的| 亚洲mv在线观看| 国产在线观看免费一区| www.亚洲色图.com| 欧美亚洲禁片免费| 精品福利视频一区二区三区| 日本一二三不卡| 亚洲国产精品尤物yw在线观看| 欧美aaaaaa午夜精品| 国产成人亚洲综合a∨猫咪| 97精品国产97久久久久久久久久久久| 欧美午夜电影网| 久久综合色综合88| 亚洲精选免费视频| 久久福利资源站| 色哟哟国产精品免费观看| 欧美一区日韩一区| 亚洲天堂福利av| 免费黄网站欧美| 91美女精品福利| 日本午夜精品视频在线观看| 久久综合狠狠综合久久综合88| 欧美高清激情brazzers| 日本一区免费视频| 日韩中文字幕91| 成人在线一区二区三区| 国产精品传媒视频| 五月天中文字幕一区二区| 成人午夜精品一区二区三区| 欧美精品v日韩精品v韩国精品v| 欧美国产日韩一二三区| 日本麻豆一区二区三区视频| 91在线免费播放| www久久久久| 五月婷婷激情综合网| 91在线精品一区二区| 精品sm捆绑视频| 视频一区二区中文字幕| 色综合久久久久综合体| 久久久亚洲精品一区二区三区| 日日夜夜精品免费视频| 91理论电影在线观看| 欧美国产一区视频在线观看| 麻豆视频一区二区| 欧美色视频在线观看| 亚洲天堂成人网| 成人一区二区三区视频| 久久嫩草精品久久久精品| 日本不卡一二三| 日韩一区国产二区欧美三区| 国产精品亚洲视频| 国产欧美精品一区| 久久久精品日韩欧美| 日韩在线一二三区| 日本精品一区二区三区四区的功能| 久久欧美一区二区| 国产中文字幕一区| 精品精品欲导航| 麻豆成人免费电影| 日韩欧美国产成人一区二区| 日韩高清国产一区在线| 欧美日韩一区 二区 三区 久久精品| 亚洲人成小说网站色在线 | 中文字幕欧美日本乱码一线二线| 看国产成人h片视频| 日韩欧美一二三| 免费视频最近日韩| 欧美电视剧在线看免费| 美日韩黄色大片| 欧美tickling挠脚心丨vk| 裸体歌舞表演一区二区| 欧美一区二区免费视频| 日本网站在线观看一区二区三区| 8v天堂国产在线一区二区| 日韩av一区二| 精品国产一区二区三区不卡| 九色porny丨国产精品| 久久综合五月天婷婷伊人| 国产伦精品一区二区三区视频青涩 | 国产乱码精品一区二区三区五月婷| 日本一区二区免费在线| 亚洲欧美激情小说另类| 一本大道久久a久久综合婷婷| 亚洲免费看黄网站| 欧美综合天天夜夜久久| 性欧美大战久久久久久久久| 88在线观看91蜜桃国自产| 久久aⅴ国产欧美74aaa| 欧美精品一区在线观看| 国产成人自拍在线| ㊣最新国产の精品bt伙计久久| 色乱码一区二区三区88| 天天综合色天天| 久久亚洲捆绑美女| 99视频精品全部免费在线| 亚洲成av人片观看| 精品乱人伦小说|