栈的表达式之计算中缀、前缀和后缀表达式
发布日期:2021-06-29 15:42:38 浏览次数:2 分类:技术文章

本文共 1615 字,大约阅读时间需要 5 分钟。

1.计算中缀表达式

//判断运算符优先级int getPriority(char op){	if(op=='+'||op=='-')		return 0;	else 		return 1;} //计算表达式int calsub(float opnd1,char op,float opnd2,float &result){	if(op=='+')		result=opnd1+opnd2;	if(op=='-')		result=opnd1-opnd2;	if(op=='*')		result=opnd1*opnd2;	if(op=='\')	{		if(fabs(opnd2)
='0'&&exp[i]<='9') { s2[++top2]=exp[i]; i++; } else if(exp[i]=='(') { s1[++top1]=exp[i]; i++; } else if(exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='\') { if(top1==-1||s1[top1]=='('||getPriority(exp[i])>getPriority(s1[top1])) { s1[++top1]=exp[i]; i++; } else { //计算 int flag=calstack(s1,top1,s2,top2); if(flag==0) return 0; } } else if(exp[i]==')') { while(s1[top1]!='(') { //计算 int flag=calstack(s1,top1,s2,top2); if(flag==0) return 0; } --top1; ++i; } } while(top1!=-1) { //计算 int flag=calstack(s1,top1,s2,top2); if(flag==0) return 0; } return s2[top2];}

2.计算后缀表达式(次顶 op 栈顶)

float calPostFix(char exp[]){	float s[maxsize];int top=-1;	for(int i=0;exp[i]!='\0';i++)	{		if('0'<=exp[i]&&exp[i]<='9')			s[++top]=exp[i]-'0';		else		{			float opnd1,opnd2,result;			char op;int flag;			opnd2=s[top--];op=exp[i];			opnd1=s[top--];			flag=calsub(opnd1,op,opnd2,result);			if(flag==0)			{				cout<<"error"<

3.计算前缀表达式(栈顶op次顶)

float calPreFix(char exp[],int len){	float s[maxsize];int top=-1;	for(i=len-1;i>=0;i--)	{		if('0'<=exo[i]&&exp[i]<='9')			s[++top]=exp[i]-'0';		else		{			float opnd1,opnd2,result;			char op;			int flag;			opnd1=s[top--];			opnd2=s[top--];			flag=calsub(opnd1,op,opnd2,result);			if(flag==0)			{				cout<<"error"<

 

转载地址:https://codingchaozhang.blog.csdn.net/article/details/85256477 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:栈的应用之设计共享栈
下一篇:栈的应用之表达式转换

发表评论

最新留言

很好
[***.229.124.182]2024年04月24日 01时12分31秒