后缀表达式求值和转换(C++)
中缀转后缀
#include<stdio.h>
#include<stack>
using namespace std;
stack<int> s;
int compare(char str,char top)// 如果当前运算符优先级低于栈顶运算符,则需要pop,返回1
{int flag=0;if(str=='+'||str=='-'){if(top!='(')flag=1;}else if(str=='*'||str=='/'){//if(top=='*'||top=='/')flag=1;if(top!='(')flag=1;}else if(str=='(')flag=0;else if(str==')'){if(top!='(')flag=1;}return flag;
}
int main()
{char str[100]={"((A+B)*C-D)*E"},str1[100];int i=0,j=0;int flag=0,temp=0;for(;str[i];i++){//处理数字(以字母形式表示数字) if(str[i]>='A'&&str[i]<='Z'){str1[j++]=str[i];}//处理运算符 else if(str[i]=='('||str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/'){while((!s.empty())&&compare(str[i],s.top())==1){ str1[j++]=s.top();s.pop();}s.push(str[i]);}else if(str[i]==')'){while(s.top()!='('){str1[j++]=s.top();s.pop();}s.pop();}}while(!s.empty()){str1[j++]=s.top();s.pop();}printf("%s",str1);
}
后缀表达式求值
#include<stdio.h>
#include<stack>
using namespace std;
stack<int> s;
//考虑多位数字 空格分割
int main()
{char str[100]={"2 3 * 5 4 * + 9 -"};int i=0;int flag=0,temp=0;for(;str[i];i++){if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')//操作符 {int p=0,q=0,val=0;p=s.top();s.pop();q=s.top();s.pop(); switch(str[i]){case '+':val=p+q;break;case '-':val=q-p;break; case '*':val=p*q;break;case '/':val=q/p;break; }//printf("val=%d\n",val);s.push(val);}else if(str[i]==' ')//空格 {if(flag==1){s.push(temp);//printf("temp=%d\n",temp);}temp=0;flag=0;}else if(str[i]<='9'&&str[i]>='0')//数字 {temp=temp*10+str[i]-'0';flag=1;}} printf("%d",s.top());
}
//答案为17
后缀表达式求值和转换(C++)相关推荐
- 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式
文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...
- python前缀表达式求值_python数据结构与算法 11 后缀表达式求值
从本节开始,删除原版的英文,直接发译后的文稿. 后缀表达式求值 栈的最一个应用例子,计算一个后缀表达式的值.这个例子中仍然用栈的数据结构.不过,当扫描表达式的时候,这次是操作数压栈等待,不是转换算法中 ...
- 表达式求值(中缀转后缀及后缀表达式求值)
.中缀表达式转后缀表达式: 中缀表达式转后缀表达式遵循以下原则: 1.遇到操作数,直接输出: 2.栈为空时,遇到运算符,入栈: 3.遇到左括号,将其入栈: 4.遇到右括号,执行出栈操作,并将出栈的元素 ...
- iOS仿写计算器中缀转后缀 表达式求值
github地址 iOS计算器 准备工作 由于OC没有自带的栈文件,只能链表模拟栈 typedef struct {char data[50];int top; }Stack;//符号栈 //之前把D ...
- 表达式求值及转换算法
2019独角兽企业重金招聘Python工程师标准>>> 后缀表达式求值算法 stack operands; //运算数栈 while(没到表达式尾) {scanf("一个运 ...
- 基于栈的后缀表达式求值(洛谷P1449题题解,Java语言描述)
题目要求 P1449题目链接 分析 给出后缀表达式求值,就相当于没了括号,而且很直接. 我们需要使用栈结构来完成任务. Java原装的栈使用了很多synchronized,导致性能不佳,但我们也就将就 ...
- 栈应用:后缀表达式求值
在上一篇博客 栈应用:中缀表达式转后缀表达式 中我们知道如何通过栈将中缀表达式转为后缀表达式,这次我们继续用栈 来实现后缀表达式求值,结合上一篇博客. 上一篇博客中是用c语言实现的,由于c语言中不支持 ...
- php表达式求值,PHP实现基于栈的后缀表达式求值功能
本文实例讲述了PHP实现基于栈的后缀表达式求值功能.分享给大家供大家参考,具体如下: 后缀表达式概述 后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左 ...
- java求值不用后缀表达式_数据结构之后缀表达式求值(java实现)
数据结构之后缀表达式求值(java实现) 前记 今天在刷leet code的时候刷到了一道题,后缀表达式(逆波兰表达式)求值,我花了一会儿写了一下它的解法.但是今天我不谈什么是后缀表达式,有兴趣的 ...
最新文章
- Java多线程协作CountDownLatch,主线程等待子线程结束
- SQL Server 数据类型转换函数
- 天籁obd接口针脚定义_OBD协议介绍
- Run tomcat 5.5 in windows server 2003 x64
- 简述控制反转ioc_深度理解Spring IOC(控制反转)
- 2017.10.1 蚯蚓 思考记录
- 在ashx文件中使用Session
- it书籍分享免费下载
- DDC 显示器数据通道
- Linux 用户授权的方法,linux中用户和权限管理
- 传统的固定思维和敏捷思维的对比
- speedoffice(Excel)表格的外框线怎么设置?
- 华硕 小布 类似机器人_“嗨 小布跟着我” | 华硕首款智能机器人“小布”正式发布...
- 解决启动IIS发生意外错误 0x8ffe2740
- 五折交叉验证/K折交叉验证, python代码到底怎么写
- python语言pos_关于python:NLTK所有可能的pos标签是什么?
- 网店走出了困境,全因有skycc营销软件
- 万宁:地产行业如何摆脱“一次性利润”困局?
- 点阵图dotplot参数详解
- 删除掉指定目录下的.nomedia文件夹和文件
热门文章
- 复古派 Retropie=
- 跨境电商收款之派安盈Payoneer个人账号收款教程
- 大型医院PACS系统源码
- app开屏广告实现——借助webview和原生fetch请求实现
- python进行整数计算_零基础学python_05_数字(整数+浮点数)
- 微信二次分享(标题、摘要、缩略图)
- 语音信号短时时域分析
- 如何用软件测试交易系统的胜率,通达信官网程序交易测试
- Qt软件开发交流群分享
- LSCP: Locally Selective Combination in Parallel Outlier Ensembles-学习笔记