数据结构实验之栈与队列二:一般算术表达式转换成后缀式
来源:互联网 发布:使命召唤8mac版迅雷 编辑:程序博客网 时间:2024/06/06 04:52
数据结构实验之栈与队列二:一般算术表达式转换成后缀式
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
Input
输入一个算术表达式,以‘#’字符作为结束标志。
Output
输出该表达式转换所得到的后缀式。
Example Input
a*b+(c-d/e)*f#
Example Output
ab*cde/-f*+
#include <stdlib.h>
using namespace std;
#define SIZE 100
#define ADDSIZE 10
struct S
{
int stacksize;
char *top,*base;
};
void Inistack(S &s)
{
s.base=new char[SIZE];
s.top=s.base;
s.stacksize=SIZE;
}
void Push(S &s,char e)
{
if(s.top-s.base>=s.stacksize)
{
s.base=(char *)realloc(s.base,(s.stacksize+ADDSIZE)*sizeof(char));
}
*s.top++=e;
}
char Pop(S &s)
{
return *--s.top;
}
int IsEmpty(S &s)
{
if(s.base==s.top)
{
return 1;
}
else
{
return 0;
}
}
char Gettop(S &s)
{
return *(s.top-1);
}
int Com(char c)
{
int flag;
if(c == '+'|| c == '-')
flag = 1;
else if(c == '*'|| c == '/')
flag = 2;
else if(c == '(')
flag = 3;
else if(c == ')')
flag = 4;
return flag;
}
int main()
{
S s;
Inistack(s);
while(true)
{
char c;
cin>>c;
if(c=='#')
{
while(!IsEmpty(s))
{
cout<<Pop(s);
}
cout<<endl;
break;
}
else if(c>='a'&&c<='z')
{
cout<<c;
}
else
{ //进栈的要当最大的
if(IsEmpty(s))
{
Push(s,c);
}
else if(Com(c)>Com(Gettop(s)))
{
if(c==')')//大的都能进,只有右括号不能进,遇到右括号把括号内的都释放
{
while(Gettop(s)!='(')
{
cout<<Pop(s);
}
Pop(s);//去掉左括号
}
else
{
Push(s,c);
}
}
else
{
if(Gettop(s) != '(')
{
cout<<Pop(s);
Push(s, c);
}
else//只有左括号不用输出
{
Push(s, c);
}
}
}
}
return 0;
}
/*后缀表达式用栈储存运算符的规则:1.若运算符优先级大于前一个则入栈2.若低于则将栈顶拿出后入栈3.左括号起与之前的运算符隔离的作用,右括号遇到后,将左括号以上依次拿出
阅读全文
0 0
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式 sdut-oj
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 2132 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 2132-数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- n皇后问题(带界面)
- 解析 html 字符串
- chm打不开
- jQuery poshytip实现页面不可视区域内的字段信息通过提示框展示
- PHP基础2数据类型新get知识点
- 数据结构实验之栈与队列二:一般算术表达式转换成后缀式
- TCP 协议理解
- oracle 添加删除 某个字段,并添加注释
- ubuntu+github+hexo+aliyun搭建个人博客
- Reserved-4
- 自定义标签中 如何使用 Spring 的 ioc
- wireshake 总结
- Spring AOP annotation 拦截表达式 分析
- 数据结构实验之数组三:快速转置