SDUT2484 算术表达式的转换
来源:互联网 发布:折扣吧淘宝优站 编辑:程序博客网 时间:2024/06/11 17:55
这是一个将中缀式转化成表达式树然后在遍历输出的题
代码操作总结为:
1、把中缀式转换为后缀式。
2、把后缀式转化为表达式树。
3、将表达式树先序、中序、后序遍历得出前缀式、中缀式、后缀式。
以下是代码:
#include <stdio.h>#include <malloc.h>struct node{ char s; struct node *l,*r;};char sa[100],sb[100],sc[100];int p;void first(struct node *q){ if(q==NULL) { return ; } printf("%c",q->s); first(q->l); first(q->r);}void infix(struct node *q){ if(q==NULL) { return ; } infix(q->l); printf("%c",q->s); infix(q->r);}void postfix(struct node *q){ if(q==NULL) { return ; } postfix(q->l); postfix(q->r); printf("%c",q->s);}void h(){ int x=0,y=0; for(p=0; sa[p]!='#'; p++) { if(sa[p]>='a'&&sa[p]<='z')///如果是数字 { sb[x]=sa[p]; x++; } else if(sa[p]=='+'||sa[p]=='-') { while(y!=0&&sc[y-1]!='(') { sb[x]=sc[y-1]; x++; y--; } sc[y]=sa[p]; y++; } else if(sa[p]=='*'||sa[p]=='/') { while(y!=0&&(sc[y-1]=='*'||sc[y-1]=='/')) { sb[x]=sc[y-1]; x++; y--; } sc[y]=sa[p]; y++; } else if(sa[p]=='(') { sc[y]=sa[p]; y++; } else if(sa[p]==')') { while(sc[y-1]!='(') { sb[x]=sc[y-1]; x++; y--; } y--; } } while(y!=0) { sb[x]=sc[y-1]; x++; y--; } sb[x]='\0';}int main(){ int d=0,i; scanf("%s",sa); h(); struct node *po[100]={NULL},*pi; for(i=0;i<p;i++) { if(sb[i]>='a'&&sb[i]<='z') { pi=(struct node *)malloc(sizeof(struct node)); pi->s=sb[i]; pi->l=NULL; pi->r=NULL; po[d]=pi; d++; } else { pi=(struct node *)malloc(sizeof(struct node)); pi->s=sb[i]; pi->r=po[d-1]; d--; pi->l=po[d-1]; d--; po[d]=pi; d++; } } first(po[0]); printf("\n"); infix(po[0]); printf("\n"); postfix(po[0]); printf("\n"); return 0;}
- SDUT2484 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- JVM的简单介绍
- HBase compact 总结 及 调优配置
- 将文档(框架)中的内容在视图中输出
- 订单系统开发(仿淘宝和美团网) 之 项目总结(一)
- c++中endl与“\n”的区别
- SDUT2484 算术表达式的转换
- C++ map应用之insert方法
- 阿里巴巴买家保障定义
- linux Xinetd服务简介
- StudentRecordSet
- win7使用ssh登入连接虚拟机vmware中的Linux系统
- 输入一个字符串,输出该字符串中对称的子字符串的最大长度。
- 阿里巴巴买家保障定义
- Linux下添加服务