数据结构的练习:表达式求值

数据结构的练习:表达式求值

#include <iostream>
#include <string>
using namespace std;

const int Maxx = 100;
typedef struct
{
	char data[Maxx];
}operators;
typedef struct
{
	float data[Maxx];
}numbers;
numbers nums;
operators opers;
char cspS[7] = {'#', ')', '+', '0', '*', '0', '('};
char ispS[7] = { '#', '(', '0', '+', '0', '*', ')' };
char trans(char s){
	if (s == '/'){
		return '*';
	}
	else if (s == '-'){
		return '+';
	}
	else{
		return s;
	}
}
int comPri(char operS,char operC){
	int numC,numS;
	for (int i = 0; i < 7; ++i)
	{
		if (ispS[i]==operS)
			numS=i;
		if (cspS[i]==operC)
			numC=i;
	}
 	if(numC>numS)
		return 1;
  	else if (numC==numS)
		return 0;
	else 
		return -1;
}
float cal(char oper,float num1,float num2){
	if (oper == '+'){
		return num1 + num2;
	}else if(oper=='-')
		return num1-num2;
	else if(oper=='*')
		return num1*num2;
	else if (oper == '/')
		return num1 / num2;
	else
		return 0;
}
int main()
{
	char ch;
	int numTop=-1,operTop=-1;
	opers.data[++operTop]='#';
	ch = getchar();
	while(ch!='#'||operTop>0){
		if (ch >= 48 && ch <= 57){
			float temNum=(float)((int)ch % 48);
			while ((ch = getchar())>=48&&ch<=57){
				temNum = temNum * 10 + (float)((int)ch % 48);
			}
			nums.data[++numTop] = temNum;
		}else{
			char tem=trans(ch);
			int res=comPri(trans(opers.data[operTop]),tem);
			if (res>0)
			{
				opers.data[++operTop]=ch;
				ch = getchar();
			}else if(res<0)
			{
				nums.data[numTop-1] = cal(opers.data[operTop], nums.data[numTop - 1], nums.data[numTop]);
				numTop--;
				operTop--;
			}else {
				operTop--;
				ch = getchar();
			}
		}
	}
	cout<<nums.data[numTop]<<endl;
	getchar();
	getchar();
	return 0;
}

运用进栈和出栈

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值