




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include #include#include#include#includeusing namespace std;#define OK 1#define ERROR 0#define OVERFLOW -2#define STACK_SIZE 100#define STACKINCREMENT 10#define OPSIZE 7typedef double ElemType;typedef char SElemType;char opOPSIZE=+,-,*,/,(,),#;char priorOPSIZEOPSIZE=, ,base=(ElemType *)malloc(STACK_SIZE * sizeof(ElemType); if(NULL=S1-base) printf(Init Failed!n); exit (OVERFLOW); else S1-top=S1-base; S1-Stacksize=STACK_SIZE; int StackEmpty(OPND *S1) if(S1-top=S1-base) return 1; else return 0;int StackEmpty(OPTR *S2) if(S2-top=S2-base) return 1; else return 0;void InitStack(OPTR *S2) S2-base=(SElemType *)malloc(STACK_SIZE*sizeof(SElemType); if(NULL=S2-base) printf(Init Failed!n); exit (OVERFLOW); else S2-top=S2-base; S2-Stacksize=STACK_SIZE; void Push(OPND *S1,ElemType e) if(S1-top-S1-base=S1-Stacksize) S1-base=(ElemType *)realloc(S1-base,(S1-Stacksize+STACKINCREMENT)*sizeof(ElemType); if(!S1-base) exit(OVERFLOW); S1-top=S1-base+S1-Stacksize; S1-Stacksize=S1-Stacksize+STACKINCREMENT; *S1-top=e; S1-top+;void Push(OPTR *S2,SElemType e) if(S2-top-S2-base=S2-Stacksize) S2-base=(SElemType *)realloc(S2-base,(S2-Stacksize+STACKINCREMENT)*sizeof(SElemType); if(!S2-base) exit (OVERFLOW); S2-top=S2-base+S2-Stacksize; S2-Stacksize+=STACKINCREMENT; *S2-top+=e;ElemType Pop(OPND *S1,ElemType *e) if(!StackEmpty(S1) S1-top=S1-top-1; *e=*S1-top; else return ERROR; return OK;SElemType Pop(OPTR *S2,SElemType *e) if(StackEmpty(S2) return ERROR; else *e=*-S2-top; return OK;ElemType GetTop(OPND *S1,ElemType *e) if(!StackEmpty(S1) *e=*(S1-top-1); return OK;SElemType GetTop(OPTR *S2,SElemType *e) if(!StackEmpty(S2) *e=*(S2-top-1); return OK;bool Judege(char c,char *op)/判断C是否为运算符 bool check=false; int i; for(i=0;iOPSIZE;i+) if(c=opi) check = true; return check;int ReturnOpOrd(char c,char *op)/返回运算符c在OP中的位置 int i; for(i=0;iOPSIZE;i+) if(c=opi) return i; return OK;char Precede(char theat1,char theat2)/g判断运算符栈的栈顶运算符theta1和读入的运算符theta2优先关系 return priorReturnOpOrd(theat1,op)ReturnOpOrd(theat2,op);double Operate(ElemType a,SElemType theat,ElemType b)/操作数进行运算 switch(theat) case +: return a+b; break; case -: return a-b; break; case *: return a*b; break; case /: if(b!=0) return a/b; else printf(出错!除数为0!n); return ERROR; break; default: return 0; float EvaluateExpression(char *expression) OPND S1; OPTR S2; char *c=expression; ElemType e1,e2,result,d; char temp10,r2; SElemType e; InitStack(&S1); InitStack(&S2); Push(&S2,#); strcpy(temp,0); while(*c!=#|(GetTop(&S2,&e),e)!=#) if(!Judege(*c,op) r0=*c; r1=0; strcat(temp,r); c+; if(Judege(*c,op) d=(float)atof(temp); Push(&S1,d); strcpy(temp,0); else switch(Precede( (GetTop(&S2,&e),e),*c) case : Pop(&S1,&e1); Pop(&S1,&e2); Pop(&S2,&e); result=Operate(e2,e,e1); Push(&S1,result); break; Pop(&S1,&result); return result;int main()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全国导游证考试知识要点及预测题集
- 2025年财务会计岗位招聘面试预测题及策略分析
- 2025年猪肉储备库招聘面试题分析及应对策略
- 2025年软件开发技术面试模拟题集及解析
- 2025年物流行业运输调度员招聘考试题库及解析
- 2025年焊接工艺与热切割作业模拟题集及解析
- 38、水平一花样跳绳18
- 2025年护士中级职称考试专业知识题库
- 2025年燃气行业求职必-备中级储运工岗位模拟题与答案
- 2025年机械设计工程师面试宝典与模拟题答案详解篇
- 2025年医疗器械生产企业员工培训试题(附答案)
- 2025年中药调剂师试卷及答案
- PE管道铺设质量检测方案
- 破局向新 持续向上-2025年人力资源发展趋势报告-智联招聘北大国发院
- 自适应加密动态调整-洞察及研究
- 全力以赴战高考乘风破浪正当时(课件)-2025-2026学年高三上学期开学第一课主题班会
- 2025年北京市房屋租赁合同范本(个人版)
- 手术室护理个案分析
- DB4451T 4-2023 潮州工夫茶艺技术规程
- 运管助理面试题及答案
- 2025至2030年中国手机电池块市场分析及竞争策略研究报告
评论
0/150
提交评论