-
算法使用的主要数据结构和实现的基本思路
- 数据结构
由于是求表达式值的过程, 所以要用栈数据结构
由于是有运算符和数字两个对象, 所以要用两个栈来存储
2. 算法
遇到各节点后的处理
-
数字
数字并不会产生计算过程, 所以只需提取数字, 将数字压栈
-
括号
括号分为两个运算符 ( 和 )
遇到 ‘( ‘说明会往下走, 所以只需将 ‘(‘ 压栈
遇到 ‘)’ 说明会往上走, 所以要计算括号表示的子树的结果, 所以要逆向计算运算符直至遇到 (
-
普通二元运算符
如果当前运算符优先级比上一运算符高, 说明是往下走, 则只需将运算符压栈
如果当前运算符优先级比上一运算符低, 说明是往上走, 则需要一直计算上一运算符直至当前运算符优先级比上一运算符高
-
具体代码
注:因为要创建俩个不同类型的栈,所以使用C++里的模板函数
创建栈:
#define INIT_SIZE 10
template<typename T>
class stack{
private: