逆波兰表达式(后缀表达式的求解)

本文探讨逆波兰表达式(后缀表达式)的原理和求解方法,通过实例解析如何进行有效的计算,适用于理解和实现相关算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:逆波兰表达式(后缀表达式的求解)

<span style="font-size:18px;">#include<iostream>
#include<stack>
using namespace std;
enum type
{
           OP_NUM,
           OP_SYMBLE,
           ADD,
           SUB,
           MUL,
           DIV
};

struct Cell
{
           type _type;
           int _value;
};

int RPN_ARRAY(Cell Array[], size_t size )
{
           size_t i = 0;
           stack<int > s;
           for (i = 0; i< size ; i++)
          {
                    if (Array [i]._type == OP_NUM)
                   {
                             s.push( Array[i]._value);
                   }
                    else
                   {
                              int right = s.top();
                             s.pop();
                              int left = s.top();
                             s.pop();
                              switch (Array [i]._value)
                             {
                              case ADD :
                                      s.push(left+right);
                                       break;
                              case SUB :
                                      s.push(left - right);
                                       break;
                              case MUL :
                                      s.push(left * right);
                                       break;
                              case DIV :
                                      s.push(left / right);
                                       break;
                              default:
                                       break;
                             }
                   }
          }
           return s.top();
}
void funtest()
{
           Cell Array[] =
          {

                   { OP_NUM, 12 },
                   { OP_NUM, 3 },
                   { OP_NUM, 4 },
                   { OP_SYMBLE, ADD },
                   { OP_SYMBLE, MUL },
                   { OP_NUM, 6 },
                   { OP_SYMBLE, SUB },
                   { OP_NUM, 8 },
                   { OP_NUM, 2 },
                   { OP_SYMBLE, DIV },
                   { OP_SYMBLE, ADD }
          };
           size_t size = sizeof (Array) / sizeof(Array[0]);
           int ret = RPN_ARRAY(Array, size);
          cout << ret << endl;
}
int main()
{
          funtest();
          getchar();
           return 0;
}</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值