题目描述

Description

对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之

Input

输入一个算术表达式,以‘#’字符作为结束标志

Output

输出该表达式转换所得到的后缀式

Sample

Input

a*b+(c-d/e)*f#

Output

abcde/-f+

转换规定

从左到右遍历中缀表达式的每个符号和字母(数字),若是字母(数字)就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于栈顶符号(乘除优先加减)则栈顶元素依次出找并输出,并将当前符号进栈,一直到最终输出后缀表达式为止

总结

+ - 进栈时,栈中元素弹出直到遇到 停止弹出。
但有两点需要注意:

+ - 需要进栈且 不出栈 。
不进栈且 出栈。

* / 进栈只弹 * /

代码如下

#include<iostream>
#include<stack>
using namespace std;const int N = 1e2 + 10;char c[N], ch[N], s[N];  //s[N] 栈
int cnt, top;void stackway()
{cnt = 0;for (int i = 0; ch[i] != '#'; i++){if (ch[i] >= 'a' && ch[i] <= 'z'){c[cnt++] = ch[i];continue;}else{if (ch[i] == '+' || ch[i] == '-' || ch[i] == ')') // + - ) 进栈{while (top){char j = s[top--];if (j == '(')   // 遇到 (停止弹出{top++;break;}c[cnt++] = j;}if (ch[i] == ')') top--;  // )不进栈elses[++top] = ch[i];continue;}else{if (ch[i] == '*' || ch[i] == '/')  // * / 进栈{while (1){if (s[top] == '*' || s[top] == '/')  // 只弹 * /{c[cnt++] = s[top--];}else{break;}}}s[++top] = ch[i];continue;}}}while (top) //栈中剩余元素输出{c[cnt++] = s[top--];}
}int main()
{while (1){cin >> ch[cnt++];if (ch[cnt - 1] == '#') break;}stackway();for (int i = 0; i < cnt; i++)cout << c[i];cout << endl;
}

SDUT OJ 2132 (一般算术表达式转换成后缀式)相关推荐

  1. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式

    数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...

  2. 一般算术表达式转换成后缀式

    数据结构实验之栈与队列二:一般算术表达式转换成后缀式 对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之. Input 输入一个算术表达式,以'#'字符作为结束标志. Output 输出 ...

  3. 数据结构实验之栈与队列二:一般算术表达式转换成后缀式

    Description 对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之. Input 输入一个算术表达式,以'#'字符作为结束标志. Output 输出该表达式转换所得到的后缀式. ...

  4. 数据结构实验之栈二:一般算术表达式转换成后缀式

    题目描述 对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之. 输入 输入一个算术表达式,以'#'字符作为结束标志. 输出 输出该表达式转换所得到的后缀式. 示例输入 a*b+(c-d/ ...

  5. B - 数据结构实验之栈与队列二:一般算术表达式转换成后缀式

    理解:分成4种情况这里不介绍,这里讲本质.后缀表达式的运算符优先级,是把前缀的运算符排列出一个优先级,然后从最优先输出的,不一定连续输出.而4种情况就是对优先级的处理. Description 对于一 ...

  6. java中的後綴表達式_求Java堆栈,将中缀算术表达式转换成后缀表达式。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package lab2.lang; import java.util.ArrayList; import java.util.HashMap; impo ...

  7. java 中缀算术表达式转换成后缀表达式_求Java堆栈,将中缀算术表达式转换成后缀表达式。...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package lab2.lang; import java.util.ArrayList; import java.util.HashMap; impo ...

  8. c语言表达式的后缀,中缀表达式转换成后缀表达式C语言程序(一)

    逆波兰表达式(Reverse Polish Notation)又叫后缀表达式.它是一种非常的表达式,可以将复杂的表达式转换成可以依靠简单的操作得到结果的表达.下面这段C语言即是用于实现将中缀表达式转换 ...

  9. Java 将中缀表达式转换成后缀表达式

    使用堆栈进行表达式的堆栈将中缀(Infix)表达式转换成后缀(postfix)表达式 完整代码 import java.io.IOException;public class InToPost {pr ...

最新文章

  1. 逾期了,如何消除不良记录?
  2. 神奇的[Caller*]属性
  3. Android中scrollview的scrollto方法不起作用的办法
  4. leetcode题解776-旋转字符串
  5. Python——Youki觉得好用的Object父类的属性方法
  6. 一道有意思的概率应用题
  7. 【Django】Specifying a namespace in include() without providing an app_name is not supported
  8. 集合操作retainAll和removeAll
  9. presto日期转换及计算
  10. 把json数据导入linux,使用json文件给es中导入数据
  11. Ridge Regression and Kernel Ridge Regression
  12. 惠普刀片服务器c7000硬件配置手册_HP C7000刀片机配置
  13. 兰州大学本科生(学士学位)LaTeX模板-2021版
  14. 自己手动导入的sdk包,提示程序包不存在,找不到符号(备忘)
  15. 开通知乎专栏和公众号啦!
  16. 华为2017实习生面试
  17. 【深度学习】CNN 中 1x1 卷积核的作用
  18. 计算机丢失CH375DLL怎么办,CH375DLL.DLL
  19. 百度手机助手存储资源优化实践
  20. 设置Android程序图标

热门文章

  1. 容器技术解决了什么问题?有何优缺点?
  2. 业务:品类和品类管理
  3. 程序员是如何开灯的 白话闲聊mqtt协议
  4. 【时间之外】10分钟搞懂Python+Tushare+Excel股票分析
  5. 商务通怎么做html留言板,网站商务通对话框设置技巧
  6. 使用Centreon监控HP惠普服务器硬件状态
  7. HDOJ/HDU 2551 竹青遍野(打表~)
  8. 关于条件编译和预编译的一点学习心得
  9. python处理excel表格中合并的行
  10. 【转载】Android App应用启动分析与优化