表达式--栈的实现(数据结构)
来源:互联网 发布:北大青鸟java收费 编辑:程序博客网 时间:2024/06/07 15:04
这段代码对一些读入的非法数据判断存在错误
比如像出现 a++b 就无法判断了
另外需要注意的是我觉得栈里面存储的是char型的,但是在操作数值的时候,会很不方便
还有一点在主函数里面如果想用while来多次读入数据的话,那么你要考虑上一次输入数据失败后,那后面的字符该怎么操作
上面出现的问题大家可以尝试着去解决
以下是根据书上的代码简单敲出来的
bool In(char c) { if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#') return true; return false; }char Precede(char t1,char t2){ char f = '>';if(t2 == '+'||t2 == '-'){if(t1 == '('||t1 == '#') f = '<';//if(t1 == '+'||t1 == '-'||t1 == '*'||t1 == '/') //这种情况是后面测试数据中如果出现两个x++y时补上的,可是发现如果是x+y+z形式也符合,so这个问题还没解决//{//FLAG = 0;return 'k';//}}if(t2 == '*'||t2 == '/'){if(t1 == '+'||t1 =='-'||t1 == '('||t1 == '#')f = '<';}if(t2 == '(')if(t1 ==')'){FLAG=0;return 'k';}elsef = '<';if(t2 == ')'){ if(t1 == '(') f = '='; if(t1 == '#') {FLAG=0;return 'K';}}if(t2 == '#'){if(t1 == '(') {FLAG=0;return 'K';}if(t1 == '#') f = '=';} return f;}char Operate(char a,char c,char b){//这里稍微调试了一下,主要是码值int和char之间的转换a = a-48; b = b-48;//cout<<((char)a+b);//cout<<a<<" "<<b<<endl;if(c == '+') return (char)(a+b+48);if(c == '-') return (char)(a-b+48);if(c == '*') return (char)(a*b+48);if(c == '/') return (char)(a/b+48);}void shixian(){char ch,k,a,b,h; //ch是读入数据,k是运算符,ab是数值,h无实际作用//int a,b,h;Stack OPTR,OPND;Init_stack(OPTR);Push(OPTR,'#');Init_stack(OPND);cin>>ch;while(ch!='#'||Gettop(OPTR)!='#'){if(FLAG==0) {printf("Wrong!");break;}//提前结束if(!In(ch)){Push(OPND,ch);cin>>ch;//Out_stack(OPND);//Out_stack(OPTR);}else{switch(Precede(Gettop(OPTR),ch)){case'>':Pop(OPTR,k);Pop(OPND,a); Pop(OPND,b);Push(OPND,Operate(b,k,a));//Out_stack(OPND);//cout<<ch;//cout<<b-48<<" "<<a-48<<endl;break;case'<':Push(OPTR,ch);cin>>ch;break;case'=':Pop(OPTR,h);cin>>ch;break;default:break;}}}if(FLAG == 1) cout<<Gettop(OPND)-48<<endl;elsecout<<"读入数据有错!\n";}
0 0
- 表达式--栈的实现(数据结构)
- 【数据结构】中缀表达式的实现
- 数据结构之栈的应用----算术表达式的实现
- 数据结构之简单四则运算表达式求值8-(栈的实现)
- 【数据结构】用栈实现对后缀表达式的计算
- 数据结构课程设计 表达式类型的实现
- 利用栈的数据结构实现中缀表达式到后缀表达式的转换
- 数据结构之---C语言实现栈的表达式求值(表达式树)
- 数据结构(C++实现):栈的运用--中缀表达式转换为后缀表达式既 nyoj 257
- 用静态栈数据结构实现表达式求值
- 数据结构----顺序栈实现逆波兰表达式(后缀表达式)求解
- 【Java数据结构的实现】之系列三栈的实现(使用栈计算后缀表达式)
- python数据结构与算法 10 栈的应用之中缀转后缀表达式算法的实现
- 数据结构 --栈的实现
- 数据结构:栈的实现
- 数据结构-----栈的实现
- 数据结构-----栈的实现
- 【数据结构】栈的实现
- instrumentation单元测试
- [awk] 用-F指定多分隔符,awk的for语句, BEGIN, END
- hdu 1728
- 指针玩数组
- 移动开发者必须了解的10大跨平台工具
- 表达式--栈的实现(数据结构)
- JS 常用正则表达式
- 第十六周项目一:数组的排序
- C语言常用库函数
- 关于《FantasyWarrior3D》开源项目编译问题的补充说明
- hdu 1205
- C语言定义和声明区别
- 笔记本分频,转百度经验
- 单链表操作