资源描述:
《算术表达式求值的运算符优先算法c语言完整代码》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、#include#include#include#defineSTACK_INIT_SIZE100#defineSTACKINCREMENT10#defineTRUE1#defineFALSE0typedefintStatus;typedefcharSElemType;typedefstruct{SElemType*base;SElemType*top;intstacksize;}StackChar;//sequence序列typedefstruct{float*base;float*top;intstack
2、size;}StackFloat;//sequence序列StatusInitStack(StackChar**S){//初始化空桟*S=(StackChar*)malloc(sizeof(StackChar));(*S)->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!(*S)->base)exit(OVERFLOW);(*S)->top=(*S)->base;(*S)->stacksize=STACK_INIT_SIZE;returnOK;}//InitStack(&S);Statu
3、sinitStack(StackFloat**S){//初始化空桟*S=(StackFloat*)malloc(sizeof(StackFloat));(*S)->base=(float*)malloc(STACK_INIT_SIZE*sizeof(float));if(!(*S)->base)exit(OVERFLOW);(*S)->top=(*S)->base;(*S)->stacksize=STACK_INIT_SIZE;returnOK;}//initStack(&S);StatusPop(StackChar**S,SElemType*a){if((*S)-
4、>top==(*S)->base){printf("ERROR!");returnERROR;}*a=*(--(*S)->top);returnOK;}//Pop(&S,&e);Statuspop(StackFloat**S,float*a){if((*S)->top==(*S)->base){printf("ERROR!");returnERROR;}*a=*(--(*S)->top);returnOK;}//Pop(&S,&e);StatusPush(StackChar*S,SElemTypee){*S->top++=e;returnOK;}//Push
5、(S,e);Statuspush(StackFloat*S,floate){*S->top++=e;returnOK;}//push(S,e);SElemTypeGetTop(StackCharS){SElemTypee;e=*(S.top-1);returne;}//GetTop(*S,&e);floatgetTop(StackFloatS){floate;e=*(S.top-1);returne;}//GetTop(*S,&e);intInOP(charc){//判断c是否为运算符,是返回TRUE,否则返回FALSEswitch(c){case'+':retur
6、nTRUE;case'-':returnTRUE;case'*':returnTRUE;case'/':returnTRUE;case'(':returnTRUE;case')':returnTRUE;case'#':returnTRUE;default:returnFALSE;}}//InOP(b[2])charprecede(SElemTypee,charc){//判断e和c的优先级,若e的优先权小于c返回'<';...'=';...'>';charOP[7]={'+','-','*','/','(',')','#'};switch(e){case'+':if(
7、c=='+'
8、
9、c=='-'
10、
11、c==')'
12、
13、c=='#')return'>';elsereturn'<';case'-':if(c=='+'
14、
15、c=='-'
16、
17、c==')'
18、
19、c=='#')return'>';elsereturn'<';case'*':if(c=='+'
20、
21、c=='-'
22、
23、c=='*'
24、
25、c=='/'
26、
27、c==')'
28、
29、c=='#')return'>';elsereturn'<';case'/':if(c=='+'
30、
31、c=='-'
32、
33、c=='*'
34、
35、c=='/'
36、
37、c==')'
38、
39、c=='#')return'>';elsereturn'<'