您的位置:首页 > 其它

SDUT2132算术表达式转换成后缀式(表达式树)

2013-02-19 09:33 239 查看
题目链接

解题报告:

这是很久前做的了。。又扒出来了。。怕再忘了嘛。。

很简单。建立表达式树,然后后序遍历。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define MAXN 200

int comp(char a, char b);

int st1[MAXN], st2[MAXN];

int main(){
int top1 = 0, top2 = 0, i=0;
char s[MAXN];
scanf("%s", s);
while(s[i] != '#'){
if(isalpha(s[i])) st1[top1++] = s[i];
else if(top2 == 0) st2[top2++] = s[i];
else if(s[i] == '(') st2[top2++] = s[i];
else if(s[i] == ')'){
while(st2[top2-1] != '(') st1[top1++] = st2[--top2];
--top2;
}
else if(comp(st2[top2-1], s[i])){
st1[top1++] = st2[--top2]; st2[top2++] = s[i];
}
else{
st2[top2++] = s[i];
}
i++;
}
while(top2 != 0){
st1[top1++] = st2[--top2];
}
for(i=0; i<top1; i++) putchar(st1[i]);
putchar('\n');
return 0;
}

int comp(char a, char b){
if(a == '(') return 0;
if(a=='*' || a=='/') return 1;
else if((a=='+' || a=='-') && (b == '+' || b == '-')) return 1;
else return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐