已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构之算术表达式求值C语言编写#include #include #include #define MAXLEN 100typedef struct char ch; int level;opt;typedef struct /定义操作栈 opt stMAXLEN; int top;Tstack;typedef struct /定义数据栈 double DMAXLEN; int top;Nstack;void Unit(Tstack *s) /初始化操作栈 s-top=-1;/Unitvoid DUnit(Nstack *s) /初始化数据栈 s-top=-1;/DUnitchar Push(Tstack *s,opt c) /入操作栈 s-top+; s-sts-top=c; return c.ch;/Pushdouble DPush(Nstack *s,double c) /入数据栈 s-top+; s-Ds-top=c; return c;/DPushopt Top(Tstack *s) /操作栈栈顶 opt error=$,-2; if(s-top=0) return s-sts-top; else return error;/Topdouble DTop(Nstack *s) /数据栈栈顶 if(s-top=0) return s-Ds-top; else return 0;/DTopopt Pop(Tstack *s) /出操作栈 opt i; opt error=$,-2; if(s-top=0) i=s-sts-top; s-sts-top.ch=0; s-top-; return i; else return error;/Popdouble DPop(Nstack *s) /出数据栈 double i; if(s-top=0) i=s-Ds-top; s-Ds-top=0; s-top-; return i; else return 0;/DPopint Empty(Tstack *s) /判断操作栈空 if(s-topsts-top.ch;/Emptyint NEmpty(Nstack *s) /判断数据栈空 if(s-topDs-top);/NEmptydouble valuate(char *e) /计算 Tstack T; Nstack N; char tmpMAXLEN=0; int i=0,leng; double d,dp; opt A=+,1; opt R=-,1; opt M=*,2; opt D=/,2; opt B=(,-1; Unit(&T); DUnit(&N); while(*e!=0) while(*e = 0 & *e = 0 & *e = 9 | *e = .) tmpi+=*e+; d=atof(tmp); DPush(&N,d); leng=strlen(tmp); for(i=0;ileng;i+) tmpi=0; i=0; switch(*e) case + : if(!Empty(&T) | Top(&T).level =A.level) switch(Pop(&T).ch) case * : dp=DPop(&N)*DPop(&N); DPush(&N,dp); break; case / : dp=DPop(&N); dp=DPop(&N)/dp; DPush(&N,dp); break; case +: dp=DPop(&N)+DPop(&N); DPush(&N,dp); break; case -: dp=DPop(&N); dp=DPop(&N)-dp; DPush(&N,dp); break; Push(&T,A); *e+; break; case -: if(!Empty(&T) | Top(&T).level =R.level) switch(Pop(&T).ch) case * : dp=DPop(&N)*DPop(&N); DPush(&N,dp); break; case / : dp=DPop(&N); dp=DPop(&N)/dp; DPush(&N,dp); break; case +: dp=DPop(&N)+DPop(&N); DPush(&N,dp); break; case -: dp=DPop(&N); dp=DPop(&N)-dp; DPush(&N,dp); break; Push(&T,R); *e+; break; case *: if(!Empty(&T) | Top(&T).level =M.level) switch(Pop(&T).ch) case * : dp=DPop(&N)*DPop(&N); DPush(&N,dp); break; case / : dp=DPop(&N); dp=DPop(&N)/dp; DPush(&N,dp); break; Push(&T,M); *e+; break; case /: if(!Empty(&T) |Top(&T).level =D.level) switch(Pop(&T).ch) case * : dp=DPop(&N)*DPop(&N); DPush(&N,dp); break; case / : dp=DPop(&N); dp=DPop(&N)/dp; DPush(&N,dp); break; Push(&T,D); *e+; break; case (: Push(&T,B); e+; break; case ): while(Top(&T).level!=-2) switch(Pop(&T).ch) case * : dp=DPop(&N)*DPop(&N); DPush(&N,dp); break; case / : dp=DPop(&N); dp=DPop(&N)/dp; DPush(&N,dp); break; case +: dp=DPop(&N)+DPop(&N); DPush(&N,dp); break; case -: dp=DPop(&N); dp=DPop(&N)-dp; DPush(&N,dp); break; Pop(&T); e+; break; while(Empty(&T) switch(Pop(&T).ch) case * : dp=DPop(&N)*DPop(&N); DPush(&N,dp); break; case / : dp=DPop(&N); dp=DPop(&N)/dp; DPush(&N,dp); break; case +: dp=DPop(&N)+DPop(&N); DPush(&N,dp); break; case -: dp=DPop(&N); dp=DPop(&N)-dp; D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 税务合规审查标准自查表
- 2025年人工肉行业生产技术与食品安全研究报告及未来发展趋势
- 2025年时尚行业可持续时尚与数字化设计研究报告及未来发展趋势
- 特定领域个人信用保护承诺书8篇
- 2025年能源行业新能源发展政策影响评估报告
- 小脑继发恶性肿瘤的护理个案
- 2025广东佛山市南海区住房城乡建设和水务局下属事业单位招聘公益一类事业编制工作人员6人参考题库附答案详解(突破训练)
- 2025年人工智能科技行业人工智能在生活中的应用研究报告及未来发展趋势
- 2025年智慧城市行业发展模式与城市治理研究报告及未来发展趋势
- 2025广东广州市社会科学院引进急需专业人才4人参考题库含答案详解(巩固)
- 气瓶基础知识及安全附件
- 2024水利水电工程模袋砂围堰技术规范
- 灿华环保科技12万吨废塑料资源循环利用生产基地项目环评报告
- 拉线塔施工方案
- 大型活动安保服务投标方案
- 《好脏的哈利》绘本故事
- GB/T 20490-2023钢管无损检测无缝和焊接钢管分层缺欠的自动超声检测
- 常见疑似预防接种异常反应诊治原则课件
- 动火证施工现场动火证申请书
- 八年级数学上册整式的乘法多项式乘以多项式
- YS/T 781.4-2012铝及铝合金管、棒、型材行业清洁生产水平评价技术要求第4部分:氟碳漆喷涂产品
评论
0/150
提交评论