前缀表达式和后缀表达式是什么呢?
对于任何算数表达式来说,如果每个操作符跟在它的两个操作数之后,而不是两个操作数之间,那么这个表达式就是后缀表达,又称为逆波兰表达式,如:
3 5 + 7 * 1 -
如果是跟在两个操作数之间,那么这个表达式就是中缀表达式,如:
(3 + 5) * 7 - 1
如果是在两个操作数之前,那么这个表达式就是前缀表达式,又称波兰表达式,如:
-*+3 5 7 1
前缀表达式求值,思路如下:
因为前缀表达式,操作符肯定都在前面,因此把操作符一一入栈:
然后,如果遇到数字了,就把取出一个操作符,再得到两个操作数,进行处理然后继续循环,直到所有的操作数都处理完毕
代码如下:
int PreFix(SeqStack* seq,char* str) {
if (seq == NULL || str == NULL) {
return;
}
int num1 = 0;
int num2 = 0;
int flag = 0;
//循环处理直到遍历完表达式
while (*str != '\0') {
if (*str == '-' || *str == '+' || *str == '*') {
SeqStackPush(seq, *str);
}
else {
if (flag == 0) {
//由于不知道咋处理,所以我设了一个标志,只有第一次是从表达式中获取两个操作数的
num1 = *