有了博客后缀表达式(2)的分析,要实现后缀表达式的计算已经非常容易了。
首先,我们构造一个结构体。这个结构体表示后缀表达式中的一个元素。这个元素可能是运算符,也可能是运算元。这里我们假设运算符有加减乘除四种,而运算元始终是正整数。结构体的定义如下。
typedef struct str_ele{
bool is_op;
int val;
} Element;
结构体成员中is_op变量表征结构体元素是否是一个运算符。如果is_op为False就表示该元素不是运算符,而是一个运算元。如果结构体的元素是运算符,那么val变量表征运算符的ASCII值,否则表征运算元的值。
根据前几篇博客的分析,我们知道(二元)后缀表达式的结构是
<第一个运算元><第二个运算元><运算符>
其中运算元本身可能也是一个后缀表达式。因此,我们很容想到通过递归的方法实现。见下面的代码。
int resolve(Element* eles, int& end)
{
int end_t = end--;
if(eles[end_t].is_op)
{
int operand2 = resolve(eles, end);
int operand1 = resolve(eles, end);
switch(eles[end_t].val)
{
case '+': return oper