数据结构实验之栈二:一般算术表达式转换成后缀式
来源:互联网 发布:柴鸡蛋逆袭网络剧下载 编辑:程序博客网 时间:2024/05/20 20:03
数据结构实验之栈二:一般算术表达式转换成后缀式
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
输入
输入一个算术表达式,以‘#’字符作为结束标志。
输出
输出该表达式转换所得到的后缀式。
示例输入
a*b+(c-d/e)*f#
示例输出
ab*cde/-f*+
提示
#include<iostream>#include<cstdlib>#include<string>#define STACK_INIT_SIZE 100//存储空间初始分配量#define STACKINCREMENT 10//存储空间分配增量using namespace std;typedef struct{ char *base; char *top; int stacksize;}SqStack;SqStack S;int InitStack(SqStack &S)//构造一个空栈{ S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char )); if(!S.base) exit(0); S.top=S.base; S.stacksize = STACK_INIT_SIZE; return 1;}char GetTop(SqStack S,char &e)//获取栈顶元素{ if(S.top==S.base) return 0; e=*(S.top-1); return 1;}int Push(SqStack &S,char e)////压栈,插入元素e为新的栈顶元素{ if(S.top-S.base>=S.stacksize)//栈满,追加存储空间 { S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char )); if(!S.base) exit(0); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e; return 1;}int Pop(SqStack &S,char &e)//出栈{ if(S.top==S.base) return 0; e=*(S.top--); return 1;}int StackEmpty(SqStack S)//判空{ if(S.top==S.base) return true; else return false;}int youxian(char c)//符号优先级判断{ if(c=='+'||c=='-') return 1; if(c=='*'||c=='/') return 2; if(c=='(') return 3; if(c==')') return 4;}int main(){ char etop,epop; string str; cin>>str; int i=0; while(str[i]!='#') { if(str[i]>='a'&&str[i]<='z'){ cout<<str[i]; //如果不是符号直接输出 } else { if(StackEmpty(S)) Push(S,str[i]);//如果栈为空,符号直接进栈 else//否则判断要进入的元素和栈顶元素的优先级 { GetTop(S,etop); if(youxian(str[i])>=youxian(etop))//如果优先级高于栈顶元素 { if(youxian(str[i])==4)//如果为‘)’,则将‘(’右边的元素出栈 { GetTop(S,etop); while(etop!='(') { cout<<etop; Pop(S,epop); GetTop(S,etop); } Pop(S,epop);//删除‘(’ } else//若不是‘)’,则进栈 { Push(S,str[i]); } } else//如果优先级低于栈顶元素 { if(etop!='(')//判断栈顶元素是否为‘(’,如果不是栈顶元素出栈,当前元素进栈 { Pop(S,epop); cout<<etop; Push(S,str[i]); } else//是‘(’进栈 { Push(S,str[i]); } } } } i++; } GetTop(S,etop); while(!StackEmpty(S))//将栈中元素出栈 { cout<<etop; Pop(S,epop); GetTop(S,etop); } cout<<endl; return 0;}
0 0
- SDUT2132数据结构实验之栈二:一般算术表达式转换成后缀式(栈)
- 数据结构实验之栈二:一般算术表达式转换成后缀式(栈)
- 数据结构实验之栈二:一般算术表达式转换成后缀式(手写栈)
- 数据结构实验之栈二:一般算术表达式转换成后缀式(栈)
- [SDUT](2132)数据结构实验之栈二:一般算术表达式转换成后缀式 ---栈
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- SDUT 2132 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- SDUT OJ 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- SDUT 2132 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- python的安装 在win上使用py
- 反射基础
- 查看linux性能信息cpu-内存-硬盘-网卡
- CSS之派生选择器(上下文选择器)
- Android缓存技术
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- javascript渲染单页效率简述
- 多线程join的问题
- 贪心算法-最优装载
- android23种设计模式
- Unity3D仿仙剑对话系统开发
- 七种经典排序算法最全攻略
- Androidstudio下代码混淆
- java集合框架