资源简介
这是严蔚敏《数据结构》配套习题册上的题目:将逆波兰式转换成波兰式,并提示错误(作为简化,只处理"+-*/"和0~9的数字)。
例如:"123*-"转换成波兰式为"-1*23"
逆波兰式"123*-"的表达式树如下:
所以这个转换过程就是:已知一个二叉树的后根遍历序列,求先根遍历序列。
算法是根据后根遍历的序列构造一个表达式树,进而先根遍历此树获得波兰式表达式。
代码片段和文件信息
#include
#include
#include
#include
#include
using namespace std;
using boost::shared_ptr;
struct Exp;
struct Item{
char number;
shared_ptr pExp;
bool isNumber;
explicit Item():isNumber(true) number(‘0‘) pExp(){ }
Item(const Item& i):number(i.number) pExp(i.pExp) isNumber(i.isNumber){ }
};
struct Exp{
char op;
Item lhs;
Item rhs;
Exp(){};
Exp(char _op Item _lhs Item _rhs):op(_op) lhs(_lhs) rhs(_rhs){ }
Exp(const Exp& e):op(e.op) lhs(e.lhs) rhs(e.rhs) { }
};
class Error{
string info;
public:
Error(string _info):info(_info){ }
Error():info(““){ }
string what(){return info;}
};
void printPorland(Exp& exp){
cout << exp.op ;
if(exp.lhs.isNumber) cout << exp.lhs.number;
else printPorland(*exp.lhs.pExp);
if(exp.rhs.isNumber) cout << exp.rhs.number;
else printPorland(*exp.rhs.pExp);
return;
}
int main()
{
stack- ExpStack;
char tmpChar;
Item tmpItem;
Item tmpLhs;
Item tmpRhs;
string numbers = “0123456789“;
string operators = “+-*/“;
cout<<“Input the Express(输入 ‘e‘标识结束):“;
do{
try{
while(cin>>tmpChar){
- 上一篇:STC15的modbus程序
- 下一篇:C++课件+STL
相关资源
- RAW格式图像转换为BMP格式
- 输入一个中缀表达式,将其转换为等
- 用单片机控制ADC0804实现5V电压表程序
- 八进制转化为十进制
- DICOM医学图像格式转换的C++实现
- MFC按行读取txt文件,以空格分隔字符
- 模数转换器ADS1252 程序适用于c51系列的
- 模数转换的C语言程序
- 大地坐标系和空间直角坐标系转换源
- 用C++编写的坐标转换源码
- MFC基于对话框的二进制与十六进制间
- C2B转换助手
- 操作系统 请求分页式存储管理的地址
- BLH与XYZ的转换
- 16进制数据与浮点型数据转换—&
- TXT转BIN软件C语言格式
- YUV数据转换成opencv的Mat的RGB<
- WavToC转换器
- UTF8与ansi string转换处理(DELPHI7开发
- 通过封装的opencv函数进行yuv.nv12到jp
- 四参数法平面坐标转换处理工具详解
- halcon和c++之间的图像数据转换
-
Hob
ject与Mat相互转换C++源代码 比原 - c++实现RGB与HSI互相转换.docx
- 一个基于AD0808的模数转换电路及程序
- 将音视频文件转换为rtsp流(live555 媒
- A/D转换程序(pcf8591)
- g711a音频文件转aac格式
- opencv:视频图片相互转换程序
- 图片位深度转换
评论
共有 条评论