由中缀表达式计算前缀表达式

本文介绍了一种使用栈来解析并计算前缀表达式的算法。该算法从右至左扫描字符串,遇到数字则压栈,遇到运算符则从栈中取出两个数进行计算并将结果重新压入栈中。通过这种方式逐步计算直至字符串扫描完成。

        算法思想:定义栈,从右向左扫描字符串,遇到运算符,则栈顶和次栈顶的元素出栈,计算结果入栈,重复上面的步骤,知道字符串扫描完毕。

 

#include <iostream>
#include <cstring>
#define MAXSIZE 256
using namespace std;
typedef struct stack
{
   int top;
   char stack[MAXSIZE];
}Stack;
void initStack(Stack *s)
{
     s->top=0;
}

int getPrefixValue(Stack *s1,char s[])
{
    int i=strlen(s);
    int temp1,temp2;
    int sum=0;
    char d;
    if(strlen(s)==0)
      {
            cout<<"中缀式不能为空."<<endl;
            return -1;
      }
     while(i>=0)
      {
           if(s[i-1]>='0'&&s[i-1]<='9')
            {
              s1->top++;
              s1->stack[s1->top]=s[i-1];
            }
           else
            {
              temp1=s1->stack[s1->top]-'0';
              s1->top--;
              temp2=s1->stack[s1->top]-'0';
              s1->top--;
              switch(s[i-1])
                  {
                     case '+':sum=temp1+temp2;break;
                     case '-':sum=temp1-temp2;break;
                     case '*':sum=temp1*temp2;break;
                     case '/':sum=temp1/temp2;break;
                  }
              s1->top++;
              s1->stack[s1->top]=sum+'0';
            }
          i--;
      }
      d=s1->stack[s1->top];
      sum=d-'0';
      return sum;
}

int main()
{
   Stack s1;
   char s[]="+-+7*345/62";
   int sum=0;
   initStack(&s1);
   cout<<"前缀式为:"<<s<<endl;
   sum=getPrefixValue(&s1,s);
   cout<<"结果求和为:"<<sum<<endl;
    return 0;
}

  

  

运行截图

 

转载于:https://www.cnblogs.com/xshang/p/3368455.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值