#include<stdio.h>
int isoperator(char x){
if(x=='+'||x=='-'||x=='*'||x=='/'||x=='^')
return 1;
return 0;
}
int isfuhao(char a){//判断读进来的字符是哪种类型的,数字.字母.运算符
if(a>='0'&&a<='9')
return 0;
else
if(isoperator(a))
return 1;
else
return 2;
}
typedef struct exp{
int value;
char ch;
struct exp *lchild;
struct exp *rchild;
struct exp *father;
}exp;
void iniexp(exp *a){
a = (exp *)malloc(sizeof(exp));
a->value = -1;
a->lchild=a->rchild=NULL;
}
exp* insert2(exp *e1,exp *e2,int a){
while(a == 0||a == 2){
if(e1->lchild == NULL){
e1->lchild = e2;
e2->father = e1;
return e1;
}
else
if(e1->lchild!=NULL&&e1->rchild == NULL){
e1->rchild = e2;
e2->father = e1;
return e1;
}
else
if(e1->lchild == NULL&&e1->rchild ==NULL)
e1 = e1->father;
}
while(a == 1){
if(e1->lchild == NULL){
e1->lchild = e2;
e2->father = e1;
return e2;
}
else
if(e1->lchild!=NULL&&e1->rchild == NULL){
e1->rchild = e2;
e2->father = e1;
return e2;
}
else
if(e1->lchild == NULL&&e1->rchild ==NULL)
e1 = e1->father;
}
}
exp readexp(){
exp *exp1,*exp3;
exp exp2;
char ex;
iniexp(&exp2);
while (scanf("%d",&ex)){
int a = isfuhao(ex);
if(a==0&&(char)ex!=';'){
if(exp2.value==-1){
exp2.ch = ex;
exp2.value = (int)ex;
exp1 = &exp2;
}
exp3 = (exp *)malloc(sizeof(exp));
exp3->ch = (char)ex;
exp3->value = (int)ex;
exp1 = insert2(exp1,exp3,a);
}
else
if(a == 1&&(char)ex!=';'){
if(exp2.value==-1){
exp2.ch = ex;
exp2.value = -2;
exp1 = &exp2;
}
exp3 = (exp *)malloc(sizeof(exp));
exp3->ch = (char)ex;
exp3->value = -2;
exp1 = insert2(exp1,exp3,a);
}
else
if(a == 2&&(char)ex==';'){
exp3 = (exp *)malloc(sizeof(exp));
exp3->ch = (char)ex;
exp3->value = 0;
exp1 = insert2(exp1,exp3,a);
}
else
if((char)ex==';')
return exp2;
}
}
void writeexp(exp e){
int a;
a = isfuhao(e.ch);
printf("%d",a);/*
if(a==1){
writeexp(e.lchild);
printf("(%s",e.ch);
writeexp(e.rchild);
}
else
if(a==0||a==2)
printf("%S",e.ch);
*/
}
main(){
printf("以波兰表达式的形式输入表达式,数字大于-1,小于10/n");
printf("以;号表示表达式输入的结束/n");
exp E1;
E1 = readexp();
writeexp(E1);
system("pause");
}
int isoperator(char x){
if(x=='+'||x=='-'||x=='*'||x=='/'||x=='^')
return 1;
return 0;
}
int isfuhao(char a){//判断读进来的字符是哪种类型的,数字.字母.运算符
if(a>='0'&&a<='9')
return 0;
else
if(isoperator(a))
return 1;
else
return 2;
}
typedef struct exp{
int value;
char ch;
struct exp *lchild;
struct exp *rchild;
struct exp *father;
}exp;
void iniexp(exp *a){
a = (exp *)malloc(sizeof(exp));
a->value = -1;
a->lchild=a->rchild=NULL;
}
exp* insert2(exp *e1,exp *e2,int a){
while(a == 0||a == 2){
if(e1->lchild == NULL){
e1->lchild = e2;
e2->father = e1;
return e1;
}
else
if(e1->lchild!=NULL&&e1->rchild == NULL){
e1->rchild = e2;
e2->father = e1;
return e1;
}
else
if(e1->lchild == NULL&&e1->rchild ==NULL)
e1 = e1->father;
}
while(a == 1){
if(e1->lchild == NULL){
e1->lchild = e2;
e2->father = e1;
return e2;
}
else
if(e1->lchild!=NULL&&e1->rchild == NULL){
e1->rchild = e2;
e2->father = e1;
return e2;
}
else
if(e1->lchild == NULL&&e1->rchild ==NULL)
e1 = e1->father;
}
}
exp readexp(){
exp *exp1,*exp3;
exp exp2;
char ex;
iniexp(&exp2);
while (scanf("%d",&ex)){
int a = isfuhao(ex);
if(a==0&&(char)ex!=';'){
if(exp2.value==-1){
exp2.ch = ex;
exp2.value = (int)ex;
exp1 = &exp2;
}
exp3 = (exp *)malloc(sizeof(exp));
exp3->ch = (char)ex;
exp3->value = (int)ex;
exp1 = insert2(exp1,exp3,a);
}
else
if(a == 1&&(char)ex!=';'){
if(exp2.value==-1){
exp2.ch = ex;
exp2.value = -2;
exp1 = &exp2;
}
exp3 = (exp *)malloc(sizeof(exp));
exp3->ch = (char)ex;
exp3->value = -2;
exp1 = insert2(exp1,exp3,a);
}
else
if(a == 2&&(char)ex==';'){
exp3 = (exp *)malloc(sizeof(exp));
exp3->ch = (char)ex;
exp3->value = 0;
exp1 = insert2(exp1,exp3,a);
}
else
if((char)ex==';')
return exp2;
}
}
void writeexp(exp e){
int a;
a = isfuhao(e.ch);
printf("%d",a);/*
if(a==1){
writeexp(e.lchild);
printf("(%s",e.ch);
writeexp(e.rchild);
}
else
if(a==0||a==2)
printf("%S",e.ch);
*/
}
main(){
printf("以波兰表达式的形式输入表达式,数字大于-1,小于10/n");
printf("以;号表示表达式输入的结束/n");
exp E1;
E1 = readexp();
writeexp(E1);
system("pause");
}