建立一个空的堆栈。
while( 文件没有结束 ) {
读取一个字符。
if 遇到一个左括号,把它入栈。
else if 遇到右括号 then 检查堆栈,{
if 堆栈为空 then 报告错误,终止程序(括号不匹配)。
else if 堆栈非空 then {
if 栈顶不是对应的左括号 then 报错,终止程序。
弹出栈顶。
}
}
if 栈非空 then 报错。
创建一个字符串output储存 postfix。
创建一个空栈 operators。
while ( )
逐个读取 infix 中的元素,储存在 temp 中。
if temp 是数字(operand)then 把 temp 压入 output 字符串。
if temp 是除了右括号 ")" 之外的运算符(operator)
if operators 栈空 then temp 入栈。
if operators 栈非空,
while ( 栈顶元素优先级大于或等于 temp 并且 栈顶元素不等于左括号 )
弹出栈顶元素到 output 。
if temp 是右括号 ")"
while ( 栈顶元素不等于左括号 )
弹出栈顶元素到 ouput.
弹出左括号, 但是不输出到 output
1. 输出 a,把 "*" 入栈 operators output top * a 2. "(" 入栈,输出 b operators output top ( * a b 3. "*"入栈,输出 c operators output top * a b c ( * 4. 读到 + 号,因为栈顶的 * 优先级大于 + 号,所以弹出栈顶到 output,也就是弹出 "*" ,并输出 "*" operators output top + a b c * d ( * 5.读到 ")" 右括号,弹出左括号 "(" 上的所有运算符,并弹出左括号 "(" ,注意此时左括号没有输出 operators output top * a b c * d + 6.最后所有元素依次出栈 operators output top a b c * d + *
原文地址:http://www.cnblogs.com/wuyuankun/p/3739766.html