基于二叉树的表达式求值

#include 
#include
#include 
#define MAXSIZE 1000
using namespace std;
char op[7] = { '+', '-', '*', '/', '(', ')', '=' };

typedef struct 
{
	char *base;
	char *top;
	int stacksize;
	
}SqStackOPTR;
 
typedef struct 
{
	double *base;
	double *top;
	int stacksize;
	
}SqStackOPND;

int InitStack(SqStackOPTR &S)
{
 	S.base=new char [MAXSIZE];
	if(!S.base) return 0;
 	S.top=S.base;
 	S.stacksize=MAXSIZE;
 	return 1;
}

int InitStack(SqStackOPND &S)
{
 	S.base=new double [MAXSIZE];
	if(!S.base) return 0;
 	S.top=S.base;
 	S.stacksize=MAXSIZE;
 	return 1;
}

int Push(SqStackOPTR &S,char e)
{
	if(S.top-S.base==S.stacksize) return 0;	
	*S.top=e;
	S.top++;
	return 1;
}

int Push(SqStackOPND &S,double e)
{
	if(S.top-S.base==S.stacksize) return 0;	
	*S.top=e;
	S.top++;
	return 1;
}


double GetTop(SqStackOPND S)
{
	if(S.top!=S.base)
		return *(S.top-1);
}

char GetTop(SqStackOPTR S)
{
	if(S.top!=S.base)
		return *(S.top-1);
}

int Pop(SqStackOPTR &S,char &e)
{
	if(S.top==S.base) return 0;
	S.top--;
	e=*S.top;
	return 1;
}

int Pop(SqStackOPND &S,double &e)
{
	if(S.top==S.base)	return 0;
	S.top--;
	e=*S.top;
	return 1;
}

int In(char ch) {//判断ch是否为运算符
	for (int i = 0; i < 7; i++) {
		if (ch == op[i]) {
			return 1;
		}
	}
	return 0;
}
char Precede(char c1, char c2)
{
	if((c1=='('&&c2==')')||(c1=='='&&c2=='=') )return '=';
	else
	if(((c1=='+'||c1=='-'||c1=='*'||c1=='/'||c1==')') && (c2=='+'||c2=='-'||c2==')'||c2=='='))||((c1=='*'||c1=='/'||c1==')')&&(c2=='*'||c2=='/')))return '>';
	else
	if(((c1=='('||c1=='=')&&c2!=')'&&c2!='=')|| ((c1=='+'||c1=='-')&&(c2=='*'||c2=='/'))||c1=='('||c2=='(') return '<';
	else 
	cout<='0'&&ch<='9')
			{//解析整数部分
				m=m*10+(ch-48);
				cin >> ch;
			}
			if(ch=='.')//解析小数部分
				cin >> ch;
			int k=1;
			while(ch>='0'&&ch<='9')
			{
				n=n+(ch-48)*pow(10.0,-k);
				k++;
				cin>>ch;
			}
		//	cout<<"此时ch为:"<> ch; //当前字符ch压入OPTR栈,读入下一字符ch
			//	cout<<"此时ch为:"<'://弹出该运算符并弹出两个数,进行运算 
			//	cout<"<

 

 

描述

 

输入一个表达式(表达式中的数均为小于10的正整数)利用二叉树来表示表达式,创建表达式树,然后利用二叉树的遍历操作求表达式的值


 

 

输入

多组数据。每组数据一行,为一个表达式,表达式以‘=’结尾。当输入只有一个“=”时,输入结束。

输出

每组数据输出一行,为表达式的值。

输入样例 1 

2*(2+5)=
1+2=
=

输出样例 1

14
3

 

你可能感兴趣的:(数据结构实验,#,Key)