中缀表达式得到后缀表达式(c++、python实现)
2018-07-12 21:17
393 查看
将中缀表达式转换为后缀表达式的算法思想如下:
从左往右开始扫描中缀表达式
遇到数字加入到后缀表达式
遇到运算符时:
1、若为‘(’,入栈
2、若为’)‘,把栈中的运算符依次加入后缀表达式,直到出现'(',’(‘出栈,退出该次循环
3、若除’(‘ 和 ‘)’,要入栈的运算符优先级大于等于栈顶的运算符的优先级,直接入栈,否者,栈顶运算符出栈,再次比较,直到出现优先级低的运算符,或者栈为空,退出
中缀表达式为空时,若栈不为空,栈中元素一直出栈,直到栈为空
运算符 ( *,/ +,- )
栈内优先级 1 5 3 6
栈外优先级 6 4 2 1
C++实现如下:
#-*- coding:utf-8 -*- if __name__=='__main__': s_mid='23/b+(c*d-e*f)/g' s_beh='' d={'(':0,')':0,'+':1,'-':1,'*':2,'/':2}; l=[] while(len(s_mid)): if s_mid[0] in d.keys(): if s_mid[0]==')': while True: if l[len(l)-1]=='(': break else: s_beh+=l.pop() l.pop() elif len(l)==0 or s_mid[0]=='(' or d[l[len(l)-1]]<d[s_mid[0]]: l.append(s_mid[0]) elif d[l[len(l)-1]]>=d[s_mid[0]]: while d[l[len(l) - 1]] >= d[s_mid[0]]: s_beh+=l.pop() if len(l)==0: break l.append(s_mid[0]) else: s_beh+=s_mid[0] s_mid=s_mid[1:] if len(s_mid)==0: while len(l): s_beh += l.pop() print s_behView Code
相关文章推荐
- 利用Python实现中缀表达式转后缀表达式
- 中缀表达式转换为后缀表达式c++的实现(数据结构stack)
- 使用SWIG实现C++扩展Python
- Python与C++ 遍历文件夹下的所有图片实现代码
- 单例模式与全局唯一id的思考----c++ ,c ,python 实现
- Python实现给文件添加内容及得到文件信息的方法
- 日历的问题C语言,C++(boost),python,Javascript,Java和Matlab实现
- python实现封装得到virustotal扫描结果
- 打印100以内的素数(质数)----C++实现、python实现
- 使用boost实现c++与python的相互调用
- 使用swig实现C++的python扩展功能
- ROS回调函数的类方法实现,both in Python 和 C++
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
- 使用SWIG实现Python调用C/C++代码
- c++ python实现 单例 singleton
- 数据结构Java实现06----中缀表达式转换为后缀表达式
- 快速排序(伪代码 c/c++ python 实现)
- c++&&python实现Hadoop Streaming的partitioner和模块化
- 利用Opencv实现微信跳一跳脚本源码放送(C++实现嵌套python)
- C++实现StringSplit(类似Python)