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

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

 

#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;

}

  

  

运行截图

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

 

你可能感兴趣的:(表达式)