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

输入格式:

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

输出格式:

在一行中输出计算结果。

限制:

2≤算式中操作数的总数≤100
1≤算式中运算符的总数≤99
运算符仅包括“+”、“-”、“*”,操作数、计算过程中的值以及最终的计算结果均在int范围内。

输入样例1:

4 3 + 2 -

输出样例1:

5

输入样例2:

1 2 + 3 4 - *

输出样例2:

-3

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 199struct SNode{int Data[MaxSize];int Top;
};
typedef struct SNode *Stack;Stack CreateStack(){Stack p;p=(Stack)malloc(sizeof(struct SNode));p->Top=-1;return p;
}void Push(Stack S,int x){if(S->Top==MaxSize){printf("Stack Full\n");}else{S->Data[++S->Top]=x;}
}int Pop(Stack S){if(S->Top==-1){printf("Stack is Empty!\n");}else{int t;t=S->Data[S->Top];S->Top--;return t;}
}int main(){Stack S;S=CreateStack();char ch;ch=getchar();int a,b,an,t;while(ch!=EOF){if(ch>='0'&&ch<='9'){Push(S,ch-'0');ch=getchar();while(ch>='0'&&ch<='9'){t=Pop(S);Push(S,t*10+ch-'0');ch=getchar();}}else if(ch=='+'||ch=='-'||ch=='*'){a=Pop(S);b=Pop(S);switch(ch){case '+':an=b+a;break; case '-':an=b-a;break; case '*':an=b*a;break;}Push(S,an);}else if(ch=='\n'){break;}ch=getchar();}printf("%d",Pop(S));
}

7-10 逆波兰表达式求值 (20 分)(c语言)(数据结构)相关推荐

  1. Suzy找到实习了吗Day 11 |栈与队列中途 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

    Day 11 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值 20. 有效的括号 注意栈不是一个数据结构,需要自己用list实现栈的逻辑 class Solu ...

  2. 算法训练第十一天|力扣20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

    20. 有效的括号 题目链接:有效的括号 参考:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B ...

  3. 算法训练Day11|LeetCode 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

    题目链接:20. 有效的括号 第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false 第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字 ...

  4. LetCode: 150. 逆波兰表达式求值

    提示 LintCode中的相关算法题实现代码,可以在我的GithHub中下载. 题目需求 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另 ...

  5. leetcode_150. 逆波兰表达式求值

    一.题目内容 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.* ./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的 ...

  6. 【Java版oj】逆波兰表达式求值

    目录 一.原题再现 二.问题分析 三.完整代码 一.原题再现 150. 逆波兰表达式求值 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除 ...

  7. 代码随想录第11天 | LeetCode20. 有效的括号、LeetCode1047. 删除字符串中的所有相邻重复项、LeetCode150. 逆波兰表达式求值

    day11 | LeetCode20. 有效的括号.LeetCode1047. 删除字符串中的所有相邻重复项.LeetCode150. 逆波兰表达式求值 文章目录 day11 | LeetCode20 ...

  8. 逆波兰表达式求值(leetcode 150)

    文章目录 1.问题描述 2.难度等级 3.热门指数 4.解题思路 5.实现示例 5.1 C++ 5.2 Golang 参考文献 1.问题描述 逆波兰表达式也叫后缀表达式. 有效的算符包括 +.-.*. ...

  9. JavaScript逆波兰表达式求值

    逆波兰表达式简介 逆波兰表达式又叫做后缀表达式.逆波兰表示法是波兰逻辑学家J・卢卡西维兹(J・ Lukasiewicz)于1929年首先提出的一种表达式的表示方法 .后来,人们就把用这种表示法写出的表 ...

最新文章

  1. JZOJ 1598. 文件修复
  2. 视觉特征--ORB系列
  3. linux系统硬盘4k对齐,linux查看硬盘4K对齐方法
  4. linux先安装svn server
  5. 极光推送 java 绑定别名_极光推送-别名篇
  6. 华为metebook电脑如何修改应用商店中新应用的默认安装路径
  7. 扩展:数据库笔试题集合-2
  8. FPAG—UART串口实现与解析-黑金fpga资料解析
  9. 百度智能云在AI云服务市场四度夺魁!
  10. python画超长图-python实现按长宽比缩放图片
  11. SpringBoot 电子书
  12. 【全角/半角是什么】关于全角和半角的区别和使用
  13. 软件测试qq是不是微信号,如何批量检测出QQ号是否开通微信?
  14. LG30刷小米系统_微信支付宝运动刷步数,IOS安卓皆可使用
  15. eas报错日记_EAS_RPC日志收集方案
  16. 共n级台阶,每次可以上1级或2级台阶,有多少种上法?
  17. NETDMIS5.0脱机编程2023
  18. 【流量池】数字广告(4)
  19. Linux服务器记录并查询历史操作记录
  20. 哪种平板电脑适合一级计算机考证

热门文章

  1. 北大青鸟s2结业考试机试_重庆北大青鸟「学员心声」任何一次的考试,都是一次珍贵的蜕变...
  2. 未检测到正确安装的网络适配器_电脑网络适配器有感叹号怎么解决?
  3. 和男朋友出去玩,该去哪里​?
  4. 我是怎么用机器学习技术找到女票的
  5. 2018年大数据趋势
  6. Python 写各大聊天系统的屏蔽脏话功能原理
  7. 程序员的项目周期(表情包版)
  8. dnf公共频道服务器不稳定已从初始化状态,DNF公共频道跨区列表 组队连不上必看...
  9. 量子计算机是程序员的未来,研究者:量子计算机一旦成功问世,时间也许会失去存在的意义...
  10. 967c语言程序设计是什么,2018年湖南师范大学数学与计算机科学院967C语言程序设计和数据结构[专硕]之C程序设计考研核心题库...