资源描述:
《算术表达式求值(小数)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#include#include#defineSTACK_INIT_SIZE100typedefdoubleSElemType;typedefstruct{SElemType*base;//栈底指针SElemType*top;//栈顶指针doublestacksize;}SqStack;doubleInitStack(SqStack&S)//初始堆栈{S.base=(SElemType*)malloc(STACK_INI
2、T_SIZE*sizeof(SElemType));S.top=S.base;S.stacksize=STACK_INIT_SIZE;return1;}SElemTypeGetTop(SqStackS)//获取顶部元素{if(S.top==S.base)return0;SElemTypee=*(S.top-1);returne;}doublePush(SqStack&S,SElemTypee)//压栈{*S.top++=e;return1;}doublePop(SqStack&S,SElemTyp
3、e&e)//出栈{if(S.top==S.base)return0;e=*--S.top;return1;}//doubleClearStack(SqStack&S)//清空栈//{//S.top=S.base;//S.stacksize=STACK_INIT_SIZE;//return1;//}//doubleStackEmpty(SqStackS)//判断栈是否为空//{//if(S.top==S.base)return1;//return0;//}//////////////////////
4、////////////////////////////charPreced(chart1,chart2);//声明doubleOperate(doublea,chartheta,doubleb);intIn(char*p)//应在前面有定义typedefcharSElemType;{//判断c是否为运算符switch(*p){case'+':return1;case'-':return1;case'*':return1;case'/':return1;case'(':return1;case')
5、':return1;case'#':return1;default:return0;}}doubleEvaluateExpression(char*p){//表达式求值,入口:表达式串,出口:计算结果值doublez;doublea,b;//为方便计算栈中弹出的两个数的结果doublek;//计算小数点时用来记位置doubletheta;charbijiao;SqStackS1;//S1存数据,SqStackS2;//S2存运算符InitStack(S1);InitStack(S2);Push(S
6、2,'#');while(*p!='#'
7、
8、GetTop(S2)!='#'){if(!In(p)){//读输入的数据,进入数据z=0;if(*p>='0'&&*p<='9'&&*p!='.'){//表达式中的数值可能不只一位数,求数值的小数点前面的数据z=z*10+*p-48;p++;}//ifif(*p=='.'){//假如遇到小数点时,进入下一个循环k=0.1;p++;while(*p>='0'&&*p<='9'){//将小数点后的数据加入数值中z+=(*p-48)*k;k=k*0.1;p++
9、;}}//ifPush(S1,z);}//ifelse{bijiao=Preced(GetTop(S2),*p);switch(bijiao){case'<'://栈顶元素优先权低theta=*p;Push(S2,theta);p++;break;case'='://去除栈中的左括号Pop(S2,theta);p++;break;case'>'://退栈并运算结果,3*(7-2)Pop(S2,theta);//-Pop(S1,b);Pop(S1,a);//2,7Push(S1,Operate(a,
10、theta,b));//7-2break;}//switch}//else}//whilereturnGetTop(S1);}//EvaluateExpressioncharPreced(chart1,chart2){//比较两个运算符的优先权,switch(t1){case'#':if(t2=='#')return'=';elsereturn'<';//#的优先权最低case'(':if(t2==')')return'=';//只有左右括号比较时才返回'='elsereturn'