全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档中缀表达式改后缀表达式一、需求分析1.本程序采用的是二叉树后序遍历来实现四则运算的中缀表达式改为后缀表达式;2.需要用一个类来代表数据的结构;3. 输入输出格式:输入:在字符界面上输入一个中缀表达式,回车表示结束。输出:如果该中缀表达式正确,那么在字符界面上输出其后缀表达式,其中后缀表达式中两相邻操作数之间利用空格隔开;如果不正确,在字符界面上输出表达式错误提示。二、概要设计抽象数据类型用Node 类来定义一个结点:class Nodepublic:char chmax; /每个结点的字符串Node* lChild; /左指针Node* rChild; /右指针Node();Node();算法的基本思想1. 输入中缀表达式,用函数对字符串中的空格或者等号进行处理,由于程序需要,会在输入的字符串结尾加入=;2. 用函数一次扫描每一个字符,有异常字符,报错;没有,则每次取出连续的数字字符或加减乘除的符号,放入结点,并按规则,将上一结点的左或右指针指向该结点;退出3. 将该树用后序遍历法,输出每个结点的值;程序的流程输入四则中缀表达式逐一扫描,判断是否有错处理表达式逐一产生结点,相关结点的左或右指针指向该结点输出算法的具体步骤1. 处理:将表达式中的空格和多余的等号删掉,在表达式的最后加上等号;2. 扫描:扫描过程在树的建立过程中;每次扫描,获得数字字符作为一个结点,并返回数字字符后的算数运算符或者括号;根据返回的运算符或括号,确定相应的指针赋值或是新建结点;(有错时,会退出程序)3. 后序遍历法输出获得结果。算法的时空分析因为在处理字符串时,需要逐一扫描,也建立了新的字符数组,所以时间复杂度为(n);同样,扫描的循环,也与字符串的长度有关,时间复杂度也为(n)输入和输出的格式输入:3.4+5*(2*(4+5)+7)输出:3.4 5 2 4 5 + * 7 + * +五、测试结果六、实验总结这个程序好难,自己很难想到这方法。不过,没想法时,看不懂别人的程序时,可以通过调试的方法,去获取程序的主要思想,从而变为自己的想法,去实现他。代码嘛,主要是多写,多仿,写代码的能力自然而然就提高了。七、附录(可选)4欢迎下载4欢迎下载。#include#includeusing namespace std;const int max=100;class Nodepublic:char chmax;Node* lChild;Node* rChild;Node();Node();Node:Node()strcpy(ch,);lChild=rChild=NULL;Node:Node()if(lChild!=NULL)delete lChild;if(rChild!=NULL)delete rChild;static int count=0;static char arraymax;/保存原始的中缀表达式static char str2*max;/保存后序遍历出来的字符串,为表达式求值提供方便static int k=0;void enter ();/输入函数char getOp(Node *temp);/temp指针保存每个接点的,返回的是运算符或者Node* crtTree(Node* root); /传入根结点指针,返回根结点指针void output(Node *root);/获得处理后的字符串 bool isError(char);/判断字符是否有问题void deal(); /对字符数组进行处理int main()Node* root=NULL;cin.getline(array,40);deal();root=crtTree(root);output(root);cout str;return 0;char getOp(Node *temp)/将数字字符存入一/个结点,并返回数字字符的后一个符号int i=0;if(isError(arraycount)exit(0);while(arraycount=0|arraycount=.)temp-chi=arraycount;i+;count+;temp-chi=0;count+;return arraycount-1;Node* crtTree(Node* root)Node *p,*q;char op;if(root=NULL)root=new Node;p=new Node;op=getOp(root);while(op!=)q=new Node;q-ch0=op;q-ch1=0;switch(op)case +:case -: q-lChild=root;root=q;p=new Node;op=getOp(p);root-rChild=p;break;case *:case /:if(root-ch0=+|root-ch0=-) p=new Node; strcpy(p-ch,root-ch); p-lChild=root; p-rChild=q; op=getOp(root); root=p; elseq-lChild=root;root=q;p=new Node;op=getOp(p);root-rChild=p;break;case (:p=root;while(p-rChild)p=p-rChild;if(p-lChild=NULL)p-lChild=crtTree(p-lChild);/递归创建/括号里的指针op=arraycount;count+;break;elsep-rChild=crtTree(p-rChild);/递归创 /建括号里的指针op=arraycount;count+;break;case ): return root;return root;void output(Node *root) /传入根结点,后/序遍历历赋值给另一个字符数组(主要是/为了给后序的计算表达式值提供方便)int n;if(root)output(root-lChild);output(root-rChild);n=0;while(root-chn!=0)strk+=root-chn+;strk+= ;bool isError(char ch) /判断每个字符/是否有错if(ch!=+&ch!=-&ch!=*&ch!=/&!(ch=0)&ch!=.&ch!=(&ch!=)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026海南旅投招聘部长1人备考题库附答案详解(培优)
- 2026浙江宁波大学附属第一医院招聘编外人员5人备考题库及一套完整答案详解
- 2026广东外语外贸大学招聘事业编制工作人员31人备考题库附答案详解(夺分金卷)
- 2026江西九江庐山市人才集团社会招聘产品部经理、计调兼导游2人备考题库及答案详解(新)
- 2026浙江舟山市普陀区民政局代管国有企业招聘合同制工作人员1人备考题库附答案详解(研优卷)
- 2026广西贵港桂平市罗播乡卫生院招聘编外工作人员的3人备考题库及完整答案详解
- 2026年温州市瓯海区面向全国引进教育人才6人备考题库含答案详解(基础题)
- 2026广发银行福州分行春季校园招聘备考题库含答案详解(培优)
- 2026湖南怀化市靖州苗族侗族自治县政务服务中心公益性岗位招聘4人备考题库含答案详解(a卷)
- 2026上海华东师范大学河口海岸全国重点实验室系统生态学课题组招聘备考题库附答案详解(完整版)
- 国内外注塑模具发展现状的调查研究
- 基础设施老化问题与对策
- 城轨列车自动控制系统-ATO子系统
- 工程项目劳务人员工资表
- 网络信息安全员(高级)-03恶意代码分析与防护课件
- 典必殊策划书0913-课件
- 京台济泰段高边坡专项施工方案京台高速公路济南至泰安段改扩建工程
- 皮肤性病学-第9版配套PPT 5 细菌性皮肤病和真菌性皮肤病
- 2021年5月四级江苏省人力资源管理师考试《理论知识》真题及答案
- 2023年上海药品审评核查中心招聘笔试模拟试题及答案解析
- YY/T 1293.4-2016接触性创面敷料第4部分:水胶体敷料
评论
0/150
提交评论