相关概念
中缀表达式就是我们平时最熟悉的算式表达式,操作符在两个数中间。那么可以想到后缀表达式就是操作符在两个数后面。
例子:
中缀表达式:1 + 2 * 3
后缀表达式:1 2 3 * +
算法过程
栈中存储的是操作符和括号。
从左到右遍历中缀表达式。
遇到括号
- 遇到左括号,进栈
- 遇到右括号,一直出栈,直到出栈的元素是右括号
遇到数字
- 直接输出
遇到操作符
- 遇到比除‘’('外栈顶运算符优先级高的操作符,入栈
- 否则依次弹出栈顶元素直到遇到’('和优先级更低的运算符
当中缀表达式遍历完后,依次弹出栈中的所有元素。
代码
特殊处理:每个数和操作符都有一个空格,以避免得到的中缀表达式数字粘合在一起。
例如12+3 没有空格就会出现123+的情况,12和3应该通过空格隔开。
#include<stdio.h>
#include<stack>
/*
比较运算符的优先级
a大于b返回1,否则返回0,当a是'('时也返回1
*/
int ComPriority(char a,char b){
if(a == '-' || a == '+'){
if(b == '/' || b == '*')
return 0;
}else
return 1;
}
/*
转化函数
输入:中缀表达式的字符数组
*/
void InToPost(char expre[]){
std: