数据结构实验之栈二:一般算术表达式转换成后缀式
来源:互联网 发布:淘宝小店推广 编辑:程序博客网 时间:2024/06/02 02:23
题目描述
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
输入
输入一个算术表达式,以‘#’字符作为结束标志。
输出
输出该表达式转换所得到的后缀式。
示例输入
a*b+(c-d/e)*f#
示例输出
ab*cde/-f*+
题解:对于这道题你可以用数组来做或者栈模板都行,首先做这道题你应该解决运算符的优先级的问题,你可以自己写一个函数来实现,它说输入一个字符串,你也可以单个输入,其实我偏向后者,仔细理解题意之后,你就能看出遇到字符就输出,遇到运算符如果字符比栈顶的大判断是不是右括号,如果不是直接入栈,是右括号的话,就输出栈内的元素直到遇到左括号。如果栈顶元素比运算符大,如果不是就输出栈顶,再把此时的运算符入栈,如果是左括号直接入栈。 #include<bits/stdc++.h>
using namespace std;
int adjustchar(char ch)
{
if(ch=='-'||ch=='+')
return 1;
if(ch=='*'||ch=='/')
return 2;
if(ch=='(')
return 3;
if(ch==')')
return 4;
}
int main()
{
char ch;
stack<char> str;
int key=0;
while(scanf("%c",&ch)!=EOF&&ch!='#')
{
if(ch>='A'&&ch<='z')
cout<<ch;
else
{
if(str.empty())
{
str.push(ch);
}
else
{
if(adjustchar(str.top())<=adjustchar(ch))
{
if(ch==')')
{
while(str.top()!='(')
{
cout<<str.top();
str.pop();
}
str.pop();
}
else
{
str.push(ch);
}
}
else
{
if(str.top()=='(')
str.push(ch);
else
{
cout<<str.top();
str.pop();
str.push(ch);
}
}
}
}
}
while(!str.empty())
{
cout<<str.top();
str.pop();
}
return 0;
}
- SDUT2132数据结构实验之栈二:一般算术表达式转换成后缀式(栈)
- 数据结构实验之栈二:一般算术表达式转换成后缀式(栈)
- 数据结构实验之栈二:一般算术表达式转换成后缀式(手写栈)
- 数据结构实验之栈二:一般算术表达式转换成后缀式(栈)
- [SDUT](2132)数据结构实验之栈二:一般算术表达式转换成后缀式 ---栈
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- SDUT 2132 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- SDUT OJ 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- SDUT 2132 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- Kmp 模板(邝斌 - 人一我百,人百我万)
- iOS远程推送
- imfilter()函数的用法
- 网络流二十四题之十二 —— 软件补丁问题(BUG)
- min3d用法
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- Flume event转化为ES的document过程分析
- 连续子数组的最大和
- 一亿条数据的排序处理
- 机器学习之支持向量机: Support Vector Machines (SVM)
- SparkSQL与Hive on Spark的比较
- Java接口和抽象类
- Xamarin.Android ListView Item 内部控件Click事件
- MyEclipse优化设置