7-6 toPosfix.c
1 #include2 #include 3 int PRI(char op) //设定算符的优先级 4 { 5 switch (op) 6 { 7 case '+': 8 case '-': 9 return 1; 10 case '*': 11 case '/': 12 return 2; 13 default: 14 return 0; 15 } 16 } 17 char *toPosfix(char *infix) // 求后序表达式 18 { 19 int length=strlen(infix); 20 char *stack,*buf,*p,flag; 21 char op; 22 int i,top=0; 23 if(!(stack=(char *)malloc(sizeof(char)*length))) //作为栈内存空间 24 { 25 printf("内存分配失败!\n"); 26 exit(0); 27 } 28 if(!(buf=(char *)malloc(sizeof(char)*length*2))) //保存后序表达式字符串 29 { 30 printf("内存分配失败!\n"); 31 exit(0); 32 } 33 p=buf; 34 for(i=0;i =PRI(op)) //判断栈顶运算符与当前运算符的级别 52 { 53 *p++=stack[top]; //将栈中的运算符保存到字符串 54 top--; //修改栈顶指针 55 flag=0; 56 } 57 if(top 0) //若栈不为空 82 { 83 *p++=stack[top]; //将栈中的运算符出栈 84 top--; //修改栈顶指针 85 } 86 free(stack);//释放栈占用的内存 87 *p='\0'; 88 return (buf); //返回字符串 89 } 90 double calc(double d1, char op, double d2) //计算函数 91 { 92 switch (op) //根据运算符进行操作 93 { 94 case '+': 95 return d1 + d2; 96 case '-': 97 return d1 - d2; 98 case '*': 99 return d1 * d2;100 case '/':101 return d1 / d2;102 }103 return 0;104 }105 double eval(char *postfix) //计算表达式的值 106 {107 double *stack,num,k=1.0; //k为系数 108 int i,length,top=0,dec=0,flag;//dec为0表示整数,为1表示小数,flag=1表示有数据需入栈 109 char token;110 111 length=strlen(postfix);112 if(!(stack=(double *)malloc(sizeof(double)*length)))113 {114 printf("内存分配失败!\n");115 exit(0); 116 }117 num=0;118 for(i=0;i