中缀表达式怎么写( 二 )


6.最终将栈中的元素依次出栈,输出 。
例如
a+b*c+(d*e+f)*g ---->abc*+de*f+g*+
遇到a:直接输出:
后缀表达式:a
堆栈:空
遇到+:堆栈:空,所以+入栈
后缀表达式:a
堆栈:+
遇到b: 直接输出
后缀表达式:ab
堆栈:+
遇到*:堆栈非空,但是+的优先级不高于*,所以*入栈
后缀表达式: ab
堆栈:*+
遇到c:直接输出
后缀表达式:abc
堆栈:*+
遇到+:堆栈非空,堆栈中的*优先级大于+,输出并出栈,堆栈中的+优先级等于+,输出并出栈,然后再将该运算符(+)入栈
后缀表达式:abc*+
堆栈:+
遇到(:直接入栈
后缀表达式:abc*+
堆栈:(+
遇到d:输出
后缀表达式:abc*+d
堆栈:(+
遇到*:堆栈非空,堆栈中的(优先级小于*,所以不出栈
后缀表达式:abc*+d
堆栈:*(+
遇到e:输出
后缀表达式:abc*+de
堆栈:*(+
遇到+:由于*的优先级大于+,输出并出栈,但是(的优先级低于+,所以将*出栈,+入栈
后缀表达式:abc*+de*
堆栈:+(+
遇到f:输出
后缀表达式:abc*+de*f
堆栈:+(+
遇到):执行出栈并输出元素,直到弹出左括号,所括号不输出
后缀表达式:abc*+de*f+
堆栈:+
遇到*:堆栈为空,入栈
后缀表达式: abc*+de*f+
堆栈:*+
遇到g:输出
后缀表达式:abc*+de*f+g
堆栈:*+
遇到中缀表达式结束:弹出所有的运算符并输出
后缀表达式:abc*+de*f+g*+
堆栈:空
5.C语言数据结构(写出下列中缀表达式的后缀表达式)答案知道是对的 。。为什么会不知到为什么对呢 。
中缀表达式和我们平时的普通表达式差不多,而后缀表达式是遇到操作符进行归约的
比如(1)里的:A- 。。。遇到-号,归约成-A(用X代替这个-A);XB+ 。。。碰到+号,归约成X+B(即:-A+B,这里的X+B用Y代替);YC- 。。。碰到-号,归约成Y-C 。。。后面照样归约就行了
我前面将的就相当于把后缀表达式翻译成中缀表达式,反过来的翻译方法其实也一样的
不知你明白没有,有问题可以再提
6.C语言 中缀表达式写了个,你试试 。
#include
#define is_digit(ch) ((ch) >= '0' && (ch) ','>','','>'},
{'>','>','','>'},
{'>','>','>','>','','>'},
{'>','>','>','>','','>'},
{'','>','>','>','$','>','>'},
{'')
{
*sp++ = *cp--;
*sp++ = ' ';
oci = get_cal_index(*cp);
}
if(pri[oci][nci] == '
7.中缀表达式转后缀表达式要先设置一个运算符的栈st,从左只有扫描中缀表达式
1、如果遇到数字,直接放到后缀表达式尾;
2、如果遇到遇到运算符
a:若此时站空,则直接入栈;
b:循环:若栈st不空且栈顶运算符的优先级大于等于当前的运算符,则栈顶运算符出栈,置于后缀表达式尾;
c:若栈st不空且栈顶运算符的优先级小于当前的运算符,则将此运算符直接入栈;
反复执行1,2,知道整个中缀表达式扫描完毕,若此时栈st不空,则将栈顶的运算符依次出栈,依次置于后缀表达式尾 。
【中缀表达式怎么写】

中缀表达式怎么写

文章插图