中缀表达式变后缀表达式算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
❖lf((x1=gettopqstack(s))==NIL) ・:・exit(O);
❖while(1)
•if(x2!='+'&& x2!='・'&& x2!=*&&
x2!=7'&& x2!=t(t && x2!=')' && x2!='#') •{ printf("% c",x2);
•x2=expression[++j];
•:・)
・:♦else if(proceed(x1,x2)==t ・:・e xit(O); ・:・if((x1=gettopqstack(s))==NIL) ・:・e xit(O); ♦x2= expression[++j]; •:・) ♦else if(proceed(x1,x2)==t>t) ♦{if((x=popqstack(s))==NIL) ・:・exit(O); ❖printf("%c”,x); ❖if((x1 =gettopqstack(s))==NIL) ・:・exit(O); .:・} ❖else if(proceed(x1 ,x2)==-{&& x仁'('&& x2=')') ❖{if(popqstack(s)==NIL) ・:・exit(O); ❖if((x1 =gettopqstack(s))==NIL) ・:・exit(O); •x2= expression[++j]; .:・} •else if(proceed(x1 ,x2)==-c&& x仁# && x2=#) •{ return 1; .:・) •else if(proceed(x1,x2)==c') •break; ・:・} •Printf(An错误!” ); •return 0; •:・proceed(x1,x2)完成算符比较功能•char proceed(char x1 ,char x2) ❖Midstring[0]=x2; ・:・midstring[1]=t\0,; •:・if(((x1=='+'||x1='・')&&strstr("+・)#,,,midstring)!=NULL|| ((x1=*||x 仁'/')&&strstr("+・*/)#”,midstring)!=NULL) ||(x1 ==')')&&strstr("+・ */)#”,midstring)!=NULL)) .:・{ ❖result。'; ❖Else if((x1==t&&x2==y)|| ❖(x1==*&& x2=#))・:.{ ❖result—; .:・) ❖Else if((x1 ='('&& x2==#)|| ❖(x1==t),&& x2=t(,)|| •:・(x1==t#,&&x2==t)>)) ❖{ result^' ❖Return result; .:・} •:•主函数如下: "include ❖#include ❖#include ❖#define MAXNUM 100 ❖#define NIL 0 • typedef char elemtype; •Typedef struct .:・{ ・:・elemtype stack[MAXNUM]; •int top; •)qstype; ❖elemtype gettopqstack(qstype *s); ❖char proceed(char x1 ,char x2); ❖Int postfix(qstype *s,char ^expression); ❖main() ・:.{ ❖char expression[80]={tt A+(B-C/D)*E,}; ❖qstype s; ❖printf(t,\n,^); • Postfix(&s,strcat(expression,"#")); ・:.} •char result; •char midstring[2]; •result*’; •void initiateqstack(qstype *s); •int pushqstack(qstype*s,elemtype x); •elemtype popqstack(qstype *s);