Stack实现表达式的求值
Posted jcahsy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Stack实现表达式的求值相关的知识,希望对你有一定的参考价值。
1.用栈求中缀表达式的值:
建立2个栈,S1暂存操作数,S2暂存运算符,当遇到操作数则入S1,遇到运算符准备入S2,首先若S2为空或者S2栈顶为‘(‘,则运算符直接入S2栈,若S2不空并且S2栈顶非‘(‘,若当前扫描运算符的运算优先级大于栈顶运算符优先级,则入栈S2,否则对S2不停地执行出栈操作,每出栈一个运算符就同时从S1出栈2个操作数,先出栈的排在右边,后出战的排在左边,然后拿这2个操作数与运算符进行运算并将结果存入S1
int getPriority(char a){ if(a == ‘+‘ || a==‘-‘){ return 0; }else{ return 1; } } int calSub(float opand1,char op,float opand2,float &result){ if(op == ‘+‘) result =opand1+opand2; if(op == ‘-‘) result =opand1-opand2; if(op == ‘*‘) result=opand1*opand2; if(op == ‘/‘){ if(fabs(opand2)<MIN){ return 0; }else{ result=opand1/opand2; } } return 1; } int calStackTopTwo(float s1[],int &top1,char s2[],int &top2){ float opand1,opand2,result; char op; int flag; opand2=s1[top1--]; opand1=s1[top1--]; op=s2[top2--]; flag=calSub(opand1,op,opand2,result); if(flag == 0){ cout<<"ERROR"<<endl; return 0; } s1[++top1]=result; return flag; } float calInfix(char exp[]){ float s1[MaxSize]; int top1=-1; char s2[MaxSize]; int top2=-1; int i=0; while(exp[i]!=‘