⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fun.cpp

📁 表达式类型的实现: 1、 一个表达式和一颗二叉树之间
💻 CPP
字号:
#include "stdafx.h"
#include "fun.h"
#include "string.h" 
#include "malloc.h"
#include <process.h>
Status ReadExpr(Tree &T){
	int flag=1,i,m,n,n1,n2,j;//m计算运算符的数目,n计算数据的数目
	while(flag){//确保输入正确的表达式	
		flag=0;m=0,n=0,n1=0,n2=0,j=0;
		printf("\n输入表达式:");
		fflush(stdin);
		scanf("%s",a);
		//printf("\n%s",a);
		for(i=0;a[i]!='\0';++i){
			if(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'||a[i]=='^')
				m++;
			else if(a[i]>='0'&&a[i]<='9')
				n1++;
			else if(a[i]>='a'&&a[i]<='z'){
				n2++;b[j]=a[i];j++;
			}
			
			
			else{ //非合法字符
				printf("\n输入字符非法,请重新输入表达式");
				flag=1;break;
			}
			n=n1+n2;
			if(n>m+1){
				printf("输入的表达式错误,请重新输入");
				flag=1;break;
			}
			if(a[i+1]=='\0')
				if(n!=m+1){
				printf("输入的表达式错误,请重新输入");
				flag=1;break;
				}
		}//for
		b[j]='\0';
	}//while
	//printf("输入成功");
	k=0;
	CreateTree(T);
	//printf("建树成功");
	//printf("\n按任意键继续....");
	//fflush(stdin);
	//getchar();
	return OK;
}

	

Status Assign(Tree &T,char v,char c){
	if(T){
		if((T->data)==v) T->data=c;
		Assign(T->lchild,v,c);
		Assign(T->rchild,v,c);
	}
	return OK;
	
}



Status WriteExpr(Tree T){
	if(T){
		if(T->lchild!=NULL)
			printf("(");
		WriteExpr(T->lchild);
		printf("%c",T->data);
		WriteExpr(T->rchild);
		if(T->rchild!=NULL)
			printf(")");
	}
	return OK;
}





Status Value(Tree T){
	int sum=0,sum1=0,sum2=0,i;char c;
	if(T==NULL)
		sum=0;
	else{
		c=T->data;
		if((c>='0'&&c<='9')||(c>='a'&&c<='z')){
			if(c>='a'&&c<='z')
				c=0;
			if(c>='0'&&c<='9')
				c=c-48;
			sum=(int)c;
		}
		else if(c=='+'||c=='-'||c=='*'||c=='/'||c=='^'){
			sum1=Value(T->lchild);
			//printf("树1的值%d",sum1);
			sum2=Value(T->rchild);
			//printf("树2的值%d",sum2);
			if(c=='+')sum=sum1+sum2;
			else if(c=='-')sum=sum1-sum2;
			else if(c=='*')sum=sum1*sum2;
			else if(c=='/')sum=sum1/sum2;
			else if(c=='^'){
				sum=1;
				for(i=1;i<=sum2;++i)
					sum=sum*sum1;
			}
		}
	}

	return sum;
}

Tree CompoundExpr(char P,Tree E1,Tree E2){
	Tree T;char bb[20];
	printf("\n表达式1:");
	ReadExpr(E1);
	strcpy(bb,b);
	printf("\n表达式2:");
	ReadExpr(E2);
	strcpy(b,strcat(bb,b));
	if(!(T=(ThrNode *)malloc(sizeof(ThrNode)))) exit(-2);
	T->data=P;
	T->lchild=E1;
	T->rchild=E2;
	printf("\n复合表达式为:");
	WriteExpr(T);
	return T;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -