版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 数据结构作业报告 逆波兰式的计算 一 题目内容 逆波兰式也叫后缀表达式(将运算符写在HYPERLINK http:/baike./v485684.htm?ch=ch.bk.innerlink操作数之后) 如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+ (a+b)*c-(a+b)/e的后缀表达式为: (a+b)*c-(a+b)/e (a+b)*c)(a+b)/e)- (a+b)c*)(a+b)e/)- (ab+c*)(ab+e/)- ab+c*ab+e/- 计算给出的逆波兰式(假设条件:逆波兰表达式由单字母变量和双目四则运算符构成,以#作为结束标志)。二题目分析 逆波兰式即后
2、缀表达式,运算符置于两个操作数之后。运算实应从前往后依次读出两个运算数,与这两个运算数之后的运算符进行计算,然后再从前往后提取两个操作数,再从之后提取对应的运算符,直到计算完毕。这与栈的功能相一致,建立一个栈结构,将表达式的各个字符依次读取,若是数字则放入栈中,若是操作符则从栈中提取两个数字进行运算,将运算结果加入到栈中,直至运算完毕。三程序描述首先定义相关数值,建立栈结构的数据类型typedef structSElemType *base;SElemType *top;int stacksize;SqStack;之后是各个对栈的操作函数 Status InitStack(SqStack &S
3、)S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;/建立空栈Status Push(SqStack &S,SElemType e)if(S.top-S.base=S.stacksize)S.base=(SElemType*)malloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemTYpe);if(!S.base)exi
4、t(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;return OK;/将栈顶元素输出到元素e之中Status Pop(SqStack &S,SElemType e) if(S.top=S.base)return ERROR;e=*-S.top;return OK;/将元素e加入到栈之中程序最重要的操作函数如下(进行计算操作):char CalVal_InverPoland(char Buffer)Stack Opnd;InitStack(Opnd);int i=0;char c;ElemTyp
5、e e1,e2;while(Bufferi!=#) if(!IsOperator(Bufferi)Push(Opnd,Bufferi);elsePop(Opnd,e2);Pop(Opnd,e1);c=Cal(e1,Bufferi,e2);Push(Opnd,c);i+;return c;while循环中是对表达式各字符的判断和计算过程,如果是数字则加入栈中,是操作符则从栈中提取两数据进行计算,之后将计算结果加入到栈中,直至遇到表达式结束标志#则结束运算,栈中数字则为计算结果。Status IsOpertor(char c)char *p=#+-*/;while(*p)if(*p=c)retur
6、n TRUE;p+;return FALSE;/数字操作符判断函数char Cal(char c1,char op,char c2)int x,x1,x2;char ch10;ch0=c1;ch1=0;x1=atoi(ch);ch0=c2;ch1=0;x2=atoi(ch);switch(op)case +:x=x1+x2;break;case -:x=x1-x2;break;case *:x=x1*x2;break;case /:x=x1/x2;break;default:break;itoa(x,ch,10);return ch0;/计算函数如计算1+6-4,则逆波兰式式为16+4-,输入
7、16+4-#,计算结果应为3,运行结果如下四源代码#include #include #include #include #define SElemType char#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int Status;#define OVERFLOW -1#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef structSElemType *base;SElemType *top;int stacksize;SqStack;Stat
8、us InitStack(SqStack &S)S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;Status Push(SqStack &S,SElemType e)if(S.top-S.base=S.stacksize)S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemT
9、ype);if(!S.base)exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;return OK;Status Pop(SqStack &S,SElemType &e) if(S.top=S.base)return ERROR;e=*-S.top;return OK;Status IsOperator(char c)char *p=#+-*/;while(*p)if(*p=c)return TRUE;p+;return FALSE;char Cal(char c1,char op,ch
10、ar c2)int x,x1,x2;char ch10;ch0=c1;ch1=0;x1=atoi(ch);ch0=c2;ch1=0;x2=atoi(ch);switch(op)case +:x=x1+x2;break;case -:x=x1-x2;break;case *:x=x1*x2;break;case /:x=x1/x2;break;default:break;itoa(x,ch,10);return ch0;char CalVal_InverPoland(char Buffer)SqStack Opnd;InitStack(Opnd);int i=0;char c;SElemType e1,e2;while(Bufferi!=#) if(!IsOperator(Bufferi)Push(Op
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026工业互联网平台标准化建设与中小企业接入痛点研究报告
- FPC电子线路板项目可行性研究报告
- 2026年中国液体洗涤剂行业分析报告-行业运营态势与发展商机研究
- 2026年单招考试模拟题目及答案详解
- 2026年消防知识竞赛试题库及答案详解
- 2026年养老护理员职业技能等级三级试题题库(含答案)
- 2026年湖北三支一扶考试公共基础知识模拟题试卷及答案详解
- AI芯片编译器优化项目可行性研究报告
- AI辅助绒花制作项目可行性研究报告
- 2026年中国烟草物流市场深度评估研究报告
- 2025年9月27日安徽省市遴选笔试真题及解析(省直卷)
- T/CECCEDA 1-2025企业管理创新体系要求及实施指南
- 老旧小区改造施工安全文明管理方案解读
- 《基于WEB漏洞检测系统的设计与实现》10000字(论文)
- DZ∕T 0270-2014 地下水监测井建设规范
- DL-T5153-2014火力发电厂厂用电设计技术规程
- 第一章-中国语言与文化概论
- 初二物理第一、二单元测试试卷
- 实验室安全事故案例
- GA/T 1991-2022法庭科学疑似毒品中卡西酮等5种卡西酮类毒品检验气相色谱和气相色谱-质谱法
- 沈阳地铁6号线一期工程环评报告
评论
0/150
提交评论