中缀表达式变后缀表达式算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档