日博足彩
当前位置:主页 > 日博足彩 >

在数据结构中使用堆栈来实现表达式评估。例如,4 + 2(10

时间:2019-07-26 10:10  来源:admin   作者:365bet在线注册   点击:
展开全部
我写的代码与其他人不相符。如果你只是调试,你绝对可以使用#includestdio。
h#综合
h #includestdlib
h #define OPSET SIZE 7 //功能结果状态代码#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE-1 #define OVERFLOW-2 / // Status是函数结果typedefintStatus的状态代码。#DefineSTACK_INIT_SIZE1000 //存储空间分配allocationTypedefstruct{char * base;}char * top; intstacksize;}StackChar; typedef struct{float * base; float * top; intstacksize;}StackFloat;表3。
运算符之间的优先关系,=,=}。floatOperate(float,unsigned chartheta,floatb); charOPSET[OPSETSIZE]={+, - ,*,/(),#StatusIn(charTest,char * TestOp); Charprecede(charAop,charBop); intatof(char * snum){intl = strlen(snum),i = 1,sum = snum[l-1]-0l-;而(l-){i * = 10; Sum + =(snum[1]-0)* i;}returnum;}voidInitStackChar(StackChar&S){//构造一个空的SS堆栈。
Base =(char *)malloc(STACK_INIT_SIZE * sizeof(char)); if(!
S.
基本输出(OVERFLOW);
高于= S.
基地S.
Stacksize = STACK_INIT_SIZE;}voidInitStackFloat(StackFloat&S){//构造一个空的SS堆栈。
Base =(float *)malloc(STACK_INIT_SIZE * sizeof(float)); if(!
S.
基本输出(OVERFLOW);
高于= S.
基地S.
Stacksize = STACK_INIT_SIZE;}charGetTopChar(StackCharS){/ Element S *(返回S的返回值的第一个元素)
Top -1);}floatGetTopFloat(StackFloatS){// Element S *(返回S的返回值的第一个元素)
Up-1);}voidPushChar(StackChar&S,chare){* S
Top ++ = e;}voidPushFloat(StackFloat&S,float){* S
Top ++ = e;}voidPopChar(StackChar&S,char&e){e = * -S
voidPopFloat(StackFloat&S,float&e){e = * -S
上面;}floatEvaluateExpression(char * MyExpression){//算法3。
4 //用于评估算术表达式的算子算法。
// OPTR和OPND是运算符堆栈和操作数堆栈,OP是一组运算符。
StackCharOPTR; //运算符堆栈,字符元素StackFloatOPND; //操作数堆栈,real元素charTempData[20]; //整数支持floatData,a,b。charTheta,* c,x,Dr[2]; InitStackChar(OPTR); PushChar(OPTR,#InitStackFloat(OPND); c = MyExpression; strcpy(TempData,/ 0); while(* c!
=#|| GetTopChar(OPTR)
=#){是(!
在(* c,OPSET)){Dr[0]= * c; Dr[1]= / 0 strcat(TempData,Dr); c ++; if(* c,OPSET)){data =(float)atof(TempData); PushFloat(OPND,Data); else{//不是运算符,但按下开关((以GetTopChar(OPTR)开头,* c)){case://堆栈顶部PushChar(OPTR),* c)下元素的优先顺序。c ++;删除破损的case =://括号并接收下一个PopChar字符(OPTR,x)。c ++;取消堆栈并输入破案的结果:// Stack PopChar operation(OPTR,theta)。PopFloat(OPND,b); PopFloat(OPND,a); PushFloat(OPND,Operate(a,theta,b)); break;unsigned chartheta,float b){switch(theta){case +:return a + b; case-:return a-b; case *:return a * b; case /:return a / b; default:return 0;}}StatusIn(charTest,char *TestOp){boolFind = false;}; for(inti = 0; iOPSETSIZE; i ++){if(Test == TestOp[i])search = true;}return Find;}intReturnOpOrd(charop,char * TestOp){inti; for(i = 0; iOPSETSIZE; i ++){if(op == TestOp[i])returni;}return 0}charprecede(charAop,charBop){returnPrior[ReturnOpOrd(Aop,OPSET)][ReturnOpOrd(Bop,Bop,OPSET)]intmain(){chars[1001];)];}long printf(输入表达式的行并以#:/ n结束); while(get(s)){result =(long)EvaluateExpression(S); printf(结果为%d / n,结果)。printf(连续输入:/ n);}}