后缀表达式

📅 2026/7/28 14:45:27
后缀表达式
对于一个算术表达式我们的一般写法是这样的(3 4) × 5 - 6这中写法是中序表达式而后序表达式则是将运算符放在操作数的后面,如3 4 5 × 6 -可以看出后序表达式中没有括号, 只表达了计算的顺序, 而这个顺序恰好就是计算器中的一般计算顺序。运用后缀表达式进行计算的具体做法建立一个栈S 。从左到右读表达式如果读到操作数就将它压入栈S中如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作符运算再将运算的结果代替原栈顶的n项压入栈S中 。如果后缀表达式未读完则重复上面过程最后输出栈顶的数值则为结束。例 : 6 5 2 3 8 * 3 *先将前面的数字入栈栈 :6 5 2 3遇到 ” ” 取栈顶的两个操作数做加法, 2 3 5 , 入栈栈 :6 5 5遇到 ” 8 ” 入栈栈 :6 5 5 8遇到 ” * ” 取栈顶的两个操作数做乘法, 5 * 8 40 , 入栈栈 :6 5 40遇到 ” ” 取栈顶的两个操作数做加法, 5 40 45 , 入栈栈 :6 45遇到 ” 3 ” 入栈栈 :6 45 3遇到 ” ” 取栈顶的两个操作数做加法, 45 3 48 , 入栈栈 :6 48遇到 ” * ” 取栈顶的两个操作数做加法, 6 * 48 288 , 入栈栈 :288从中序表达式 转换为 后序表达式由于后续表达式更易计算机去解决所以我们在运算算术表达式时要先转换为后序的。方法如下建立符号栈顺序扫描中序表达式a 是数字 直接输出b 是运算符i : “(” 直接入栈ii : “)” 将符号栈中的元素依次出栈并输出, 直到 “(“, “(“只出栈, 不输出iii:遇到“”或者遇到优先级更低的符号就入栈否则出栈扫描完后, 将栈中剩余符号依次输出例 : 3(2-5)*6/3遇到 3 是数字输出表达式 : 3符号栈 :遇到”” 号 , 利用法则iii 栈中没有优先级更低的符号 直接入栈表达式 : 3符号栈 : 遇到”(” , 利用 法则i, 直接入栈表达式 : 3符号栈 : (遇到”2” 输出表达式 : 3 2符号栈 : (遇到 “-” , 利用法则iii , 遇到”(“, 没有出栈符号, 直接入栈表达式 : 3 2符号栈 : ( -遇到”5” 输出表达式 : 3 2 5符号栈 : ( -遇到”)” 利用法则ii , 将”-“号出栈输出, “(” 出栈表达式 : 3 2 5 -符号栈 : 遇到”*” 利用法则ii , “*” 比””的优先级高, 所以遇到优先级更低的符号, 不用出栈, 将”*”入栈表达式 : 3 2 5 -符号栈 : *遇到”6” 输出表达式 : 3 2 5 - 6符号栈 : *遇到”/” 利用法则ii , “/” 与”*”的优先相同, 就是说”*”不是优先级更低的符号, 所以出栈输出, 继续 “”比”/”的优先级低, 不用出栈, 将”/”入栈表达式 : 3 2 5 - 6 *符号栈 : /遇到”3” 输出表达式 : 3 2 5 - 6 * 3符号栈 : /扫描完成 将符号栈内的符号依次输出表达式 : 3 2 5 - 6 * 3 /