逆波兰表示法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逆波兰表示法相关的知识,希望对你有一定的参考价值。

        逆波兰表示发是一种将运算符写在操作数后面的描述程序(算式)的方法。举个例子,我们平常用中缀表示法描述的算式(1 + 2) * (5 + 4),改为逆波兰表示法之后则是1 2 + 5 4 + *。相较于中缀表示法,逆波兰表示法的优势在于不需要括号。

        请输出以逆波兰表示法输入的算式的计算结果。

输入   在1行中输入1个算式。相邻的符号(操作数或运算符)用1个空格隔开。

输出   在1行之中输出计算结果。

限制   2≤算式中操作数的总数≤100

          1≤算式中运算符的总数≤99

           运算符仅包括“+”  “-”  “*”,操作数为106以下的正整数。

           -1×109≤计算过程中的值≤109

 输入示例   

1 2 + 3 4 - *

输出示例

-3

参考代码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 int top, S[1000];
 5 
 6 void push(int x) {
 7     S[++top] = x;
 8 }
 9 
10 int pop() {
11     top--;
12     return S[top + 1];
13 }
14 
15 int main() {
16     int a, b;
17     top = 0;
18     char s[100];
19     while (scanf("%s", s) != EOF) {
20         if (s[0] == +) {
21             a = pop();
22             b = pop();
23             push(a + b);
24         }
25         else if (s[0] == -) {
26             a = pop();
27             b = pop();
28             push(a - b);
29         }
30         else if(s[0] == *){
31             a = pop();
32             b = pop();
33             push(a * b);
34         }
35         else {
36             push(atoi(s));
37         }
38     }
39     printf("%d\n", pop());
40 
41     return 0;
42 }

 

 

 

  

以上是关于逆波兰表示法的主要内容,如果未能解决你的问题,请参考以下文章

逆波兰表示法

C语言 逆波兰表达式 算法

逆波兰表达式

逆波兰表达式

递归--逆波兰表达式

2694:逆波兰表达式