/**//*中序表达转换成后序表达式的方法:从左到右读取该中弱序表达式:1.若是操作数,则直接输出.2.若是运算符:(1)若该运算符为"(",则直接入栈.(2)若该运算符为")",则取出堆栈中的运算符,直到"("时.(3)其它: 按优先级比较,如果大于或等于堆栈中当前的运算则压入栈中,否则直接输出.(4)检查栈是否非空,如果非空,则输出所有值,直到空为止.*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#define MAX 101 /*表达式的最大长度*/typedef struct optor...{ char ch ; struct optor *next ;}OPT ;/**//*typedef struct data{ int num ; struct data *next ;}DAT ;*/ OPT *opttop = NULL ; /**//*初始堆栈*/ /**//* DAT *dattop = NULL ;*/void push_opt( int cx)...{ OPT *q ; q = (OPT *)malloc(sizeof(OPT)) ; q->ch = cx ; q->next= opttop; opttop = q ;}char top_opt(void)...{ if(opttop) return opttop->ch ; return '#' ;}void pop_opt()...{ OPT *q ; q = opttop ; opttop = opttop->next ; free(q);}int rank(char cr)...{ if( cr == '-' || cr == '+') return 1 ; else if( cr == '*' || cr == '/') return 2 ; else if( cr == '^') return 3 ;} int main(void)...{ char st[MAX]=...{'