首先我们日常见到的表达式是下面这个样子的
((1+2)*5+1)/4;
诸如此类的式子叫做中缀表达式这种表达式是基于人的思维方式
运算符号在两个要运算的数字中间,但是这并不利于计算机的计算,
计算机只需要知道要运算那两个数字和运算符号就好,
所以我没们在这里可以利用后缀表达式(也称逆波兰式)后缀表达式子
是如下样子
1#2+#5#*1+#4/ // #用于分隔两个数字
那么写成这样有什么优点呢?
(1).操作符位于操作数之后;
(2).没有括号;
(3).操作符没有优先级;
那么我们怎样将一个中缀表达式转化为后缀表达式呢?
在这里我们就需要用到栈的特性(后入先出)
中缀表达式转后缀表达式
开辟:操作符栈 stack<char>oc、结果字符串ans[];
(1).操作数压到结果字符串;操作符玉如操作符栈;
(2).当待压入操作符栈的操作符优先级大于栈顶操作符时,直接入栈;
若小于等于栈顶操作符的话,栈顶操作符加入到结果字符串后面,直到遇到前括号‘(’或者栈顶操作符优先级小于待入栈操作符,最后待入栈操作符入栈;
(3).如果时前‘(’直接入栈;
(4).如果是后‘)’,将栈中操作符依次弹出并压入结果字符串,并弹出前‘(’不加入结果字符串;
根据以上四个步骤,得到的就是后缀表达式;
实现代码
#include<stdio.h>
#include<string.h>
#include&