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

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#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;
}

  

  

运行截图

 

posted @   xshang  阅读(545)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示