将中缀表达式(infix)转换为后缀表达式(postfix)
算法描述
第一种情况,表达式不含括号。
假设存在一个函数
prcd(op1,op2)
,其中op1和op2是两个操作符(在中缀表达式中,op1在op2的左边),如果op1的优先级高于或等于op2,函数返回True,否则返回False。例如:prcd('\*','+') --> True prcd('+','-') --> True prcd('\*','/') --> True prcd('-','*') --> False
考虑表达式 A+B*C。当扫描到A时,将A添加到postfix中,接着遇到‘+’操作符,此时,由于只有一个操作数,‘+’只能先存入栈stack中;当扫描到B时,将其追加至postfix;接着遇到*,栈不为空,那么调用pcdr(pop(stack),’*’),因为‘+’优先级低于‘*’,返回False,将‘*’压入栈中,push(stack,’*’),接着遇到C,将其追加至postfix。这时,表达式扫描完,栈仍不为空,依次pop出数据,追加至postfix。最终结果为‘BC*A+’
第二种情况,表达式含有括号。
当扫描到‘(’时,将其压入堆栈,这可以通过使
prcd