中缀表达式转后缀表达式画图详解和代码实现
中缀表达式转后缀表达式思路步骤分析 : 1 初始化两个栈:运算符栈s1和存储中间结果的栈s2 2 从左至右扫描中缀表达式 3 遇到运算符时,比较其与s1栈顶运算符的优先级 3.1 如果s1为空,或栈顶运算符为左括号’(’,则直接将此运算符入栈; 3.2 否则,如果优先级比栈顶运算符的高,也直接将此运算符入栈; 3.3 否则,将s1栈顶的运算符弹出并压入s2中。然后又从3.1步开始进行比较(此时带入栈的操作符还是之前那个,只是栈顶元素已变更) 4 遇到操作数时,将其压入s2 5 遇到括号时 5.1 如果是左括号’(’,则直接压入s1 5.2 如果是右括号’)’,则依次弹出s1栈顶的运算符,并压入s2中,直到遇到左括号’('为止,将这个左括号从s1中弹出丢弃(这时候消除了一对括号) 6 重复2~5步,直到中缀表达式扫描完成 7 将s1中剩余的运算符依次弹出并压入s2中 8 依次弹出s2中的元素并输出,并将输出结果逆序,即得到后缀表达式 以中缀表达式1+((2+3)x4)-5举例 : (1)当扫描完1+((2+3后,s1和s2栈元素如下 (2)扫描到一个右括号’)’: (3)扫描到一个乘号和数字4: (4)扫描到一个右括号’)’: (5)扫描到一个减号和5: (6)将s1中剩余的运算符依次弹出并压入s2中 (7)依次弹出s2中的元素并输出,并将输出结果逆序,即得到后缀表达式 s2出栈:-