nyoj467 中缀式变后缀式
2012-08-02 08:39
239 查看
#include<stdio.h> #include<stdlib.h> #define N 1010 //字符栈的操作 typedef struct { char *base; char *top; }SqStack; int InitStack(SqStack &S) { S.base=(char *)malloc(N*sizeof(char)); if(!S.base) exit(1); S.top=S.base; return 1; } int StackEmpty(SqStack &S) { if(S.top==S.base) return 1; return 0; } int GetTop(SqStack S,char &e) { if(S.top==S.base) return 0; e=*(S.top-1); return 1; } int Push(SqStack &S,char e) { *S.top++=e; return 1; } int Pop(SqStack &S,char &e) { if(S.top==S.base) return 0; e=*--S.top; return 1; } //转化的操作过程 static int i; int Pass(char *s,char c) { s[i]=c; i++; return 1; } int level(char c,int k) { switch(c) { case '=': return 1; case ')': return k?2:5; case '+': case '-': return 3; case '*': case '/': return 4; case '(': return k?5:2; default : return 0; } } int Precede(char c1,char c2) { int k=(c1=='('&&c2=='=')||(c1=='='&&c2==')')||(c1==')'&&c2=='('); if(!k) { if(level(c1,0)<level(c2,1)||c1=='='&&c2=='=') return 0; return 1; } return 0; } int Converse(char *s) { SqStack OPTR; char ch,x,c=getchar(); InitStack(OPTR); Push(OPTR,'='); while(!StackEmpty(OPTR)) { if(!level(c,1)) Pass(s,c); else switch(c) { case '(': Push(OPTR,c);break; case ')': Pop(OPTR,ch);while(ch!='('){Pass(s,ch);Pop(OPTR,ch);}break; default : while(GetTop(OPTR,ch)&&Precede(ch,c)) { Pass(s,ch);Pop(OPTR,ch); } if(c!='=') Push(OPTR,c); break; } if(c!='=') { x=c;c=getchar(); if(!level(x,1)&&level(c,1)) Pass(s,' '); } else Pop(OPTR,ch); } s[i]='\0'; return 1; } //主函数 int main() { char s[1010]; int j,n; scanf("%d",&n); while(n--){ getchar(); i=0; Converse(s); for(j=0;s[j];++j){ putchar(s[j]); if(level(s[j],0)) putchar(' '); } printf("=\n"); } //system("pause"); return 0; }
相关文章推荐
- NYOJ 467 中缀式变后缀式
- NYOJ-467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式(栈)
- nyoj 467 中缀式变后缀式
- nyoj 题目467 中缀式变后缀式
- NYOJ467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ-467-中缀式变后缀式(模拟)
- NYOJ_467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ-467 中缀式变后缀式
- 中缀式变后缀式(nyoj 467)
- NYOJ - 中缀式变后缀式(逆波兰式)
- NYOJ - 中缀式变后缀式(逆波兰式)