算术表达式中缀转换成后缀

来源:互联网 发布:数据库系统结构模型 编辑:程序博客网 时间:2024/04/29 22:14
#include<stdio.h>#include<string.h>#include<stack>using namespace std;int OP[7][7]{    1,1,0,0,0,-1,1,// 以矩阵来表示 运算符之间的关系。     1,1,0,0,0,-1,1,// 1 表示 栈顶元算符比 刚刚下一个元算符 高级 可以运算     1,1,1,1,0,-1,1,// 0 表示 栈顶 运算符低级 就 将下一个 运算符入栈。      1,1,1,1,0,-1,1,// -1 表示 拥有 一对括号匹配 将 括号内容输出     0,0,0,0,0,-1,9,    1,1,1,1,9,-1,1,    0,0,0,0,0,9,2};int Name( char a ){int n;switch( a ){case '+': n=0; break;case '-': n=1; break;case '*': n=2; break;case '/': n=3; break;case '(': n=4; break;case ')': n=5; break;case '#': n=6; break;default : n=-1; }return n;}int Precede( char a, char b){int an1,an2;an1=Name(a);an2=Name(b);return OP[an1][an2];} int main(){char a[100];char Stack[100];int top;int len;printf("以#号结束、、、、\n"); scanf("%s",a);len=strlen(a);//a+b*printf("%d",len);top=-1;Stack[++top]='#';for( int i=0; i<len; ++i ){    if( Name(a[i])==-1 )      printf("%c",a[i]);    else    {    switch( Precede(Stack[top],a[i]) )    {    case 0: Stack[++top]=a[i]; break;    case 9: printf("error\n"); break;    case 1:             printf("%c",Stack[top]);           --top;           while( Precede(Stack[top],a[i])==1 )           {              printf("%c",Stack[top]);              --top;   }   Stack[++top]=a[i];   break;    case -1:       while( Stack[top]!='(' )      {        printf("%c",Stack[top]);        top--;  }  top--; break;case 2:        break;     }}} return 0;} 

0 0
原创粉丝点击