SDUT OJ 2132 (一般算术表达式转换成后缀式)
题目描述
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 (一般算术表达式转换成后缀式)相关推荐
- SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式
数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...
- 一般算术表达式转换成后缀式
数据结构实验之栈与队列二:一般算术表达式转换成后缀式 对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之. Input 输入一个算术表达式,以'#'字符作为结束标志. Output 输出 ...
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
Description 对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之. Input 输入一个算术表达式,以'#'字符作为结束标志. Output 输出该表达式转换所得到的后缀式. ...
- 数据结构实验之栈二:一般算术表达式转换成后缀式
题目描述 对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之. 输入 输入一个算术表达式,以'#'字符作为结束标志. 输出 输出该表达式转换所得到的后缀式. 示例输入 a*b+(c-d/ ...
- B - 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
理解:分成4种情况这里不介绍,这里讲本质.后缀表达式的运算符优先级,是把前缀的运算符排列出一个优先级,然后从最优先输出的,不一定连续输出.而4种情况就是对优先级的处理. Description 对于一 ...
- java中的後綴表達式_求Java堆栈,将中缀算术表达式转换成后缀表达式。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package lab2.lang; import java.util.ArrayList; import java.util.HashMap; impo ...
- java 中缀算术表达式转换成后缀表达式_求Java堆栈,将中缀算术表达式转换成后缀表达式。...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package lab2.lang; import java.util.ArrayList; import java.util.HashMap; impo ...
- c语言表达式的后缀,中缀表达式转换成后缀表达式C语言程序(一)
逆波兰表达式(Reverse Polish Notation)又叫后缀表达式.它是一种非常的表达式,可以将复杂的表达式转换成可以依靠简单的操作得到结果的表达.下面这段C语言即是用于实现将中缀表达式转换 ...
- Java 将中缀表达式转换成后缀表达式
使用堆栈进行表达式的堆栈将中缀(Infix)表达式转换成后缀(postfix)表达式 完整代码 import java.io.IOException;public class InToPost {pr ...
最新文章
- 逾期了,如何消除不良记录?
- 神奇的[Caller*]属性
- Android中scrollview的scrollto方法不起作用的办法
- leetcode题解776-旋转字符串
- Python——Youki觉得好用的Object父类的属性方法
- 一道有意思的概率应用题
- 【Django】Specifying a namespace in include() without providing an app_name is not supported
- 集合操作retainAll和removeAll
- presto日期转换及计算
- 把json数据导入linux,使用json文件给es中导入数据
- Ridge Regression and Kernel Ridge Regression
- 惠普刀片服务器c7000硬件配置手册_HP C7000刀片机配置
- 兰州大学本科生(学士学位)LaTeX模板-2021版
- 自己手动导入的sdk包,提示程序包不存在,找不到符号(备忘)
- 开通知乎专栏和公众号啦!
- 华为2017实习生面试
- 【深度学习】CNN 中 1x1 卷积核的作用
- 计算机丢失CH375DLL怎么办,CH375DLL.DLL
- 百度手机助手存储资源优化实践
- 设置Android程序图标