




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include #include #include #define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OK 1#define OVERFLOW -2#define ERROR 0#define TRUE 1#define FALSE 0typedef int Selemtype;typedef int Status;#define MAX 50char string1MAX; /定义两个字符串分别存放中缀表达式和后缀表达式char string2MAX;int result;typedef structSelemtype *base; /在构造之前和销毁之后,base的值为NULLSelemtype *top; /栈顶指针int stacksize; /当前分配的存储空间,以元素为单位SqStack;Status InitStack(SqStack *S);Status Push(SqStack *S,Selemtype e);Status Pop(SqStack *S,Selemtype e);Status InitStack(SqStack *S) /构造一个空栈S S-base=(Selemtype*)malloc(STACK_INIT_SIZE*sizeof(Selemtype);if(!S-base) return OVERFLOW; /存储分配失败S-top=S-base;S-stacksize=STACK_INIT_SIZE; return OK;Status Push(SqStack *S,Selemtype e) /插入元素e为新的栈顶元素if(S-top-S-base=S-stacksize) /栈满,追加存储空间 S-base=(Selemtype*)realloc(S-base,(S-stacksize+STACKINCREMENT)*sizeof(Selemtype); if(!S-base) return OVERFLOW; /存储分配失败S-top=S-base+S-stacksize;S-stacksize+=STACKINCREMENT;*S-top+=e;return OK;Status Pop(SqStack *S,Selemtype e) /若栈不空值,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERRORif(S-top=S-base) return ERROR;e=*-S-top;return OK;Status StackEmpty(SqStack *S) /若栈S为空,则返回TRUE,否则返回FALSE if(S-top=S-base) return TRUE; else return FALSE;Selemtype GetTop(SqStack *S) /取栈顶元素并用e返回其值 Selemtype e;if(S-top=S-base) return ERROR;e=*(S-top-1);return e;void transform(char str1,char str2) /将中缀表达式转换为后缀表达式 SqStack Op; InitStack(&Op); /定义一个空栈 用来存放运算符 Push(&Op,#); Selemtype top; /取得运算符栈的栈顶元素赋值给top Selemtype e=NULL; /出栈的栈顶元素赋值给e int i=0,j=0,m;char a;m=strlen(str1); for(i=0;im;i+)a=str1i;if(0=str1i&str1i=9) /如果是操作数直接放在后缀表达式中str2j=str1i;j+;elsestr2j= ;j+;switch(a) case (: Push(&Op,a); break; case *: case /: top=GetTop(&Op);if(top=*)|(top=/) Pop(&Op,e);str2j=top;j+; /比其高,现将栈顶运算符出栈,再进栈。Push(&Op,a);elsePush(&Op,a); break; case +: case -: top=GetTop(&Op); if(top=+|top=-|top=*|top=/) Pop(&Op,e); str2j=top;j+; Push(&Op,a); else Push(&Op,a); break; case ): top=GetTop(&Op); Pop(&Op,e); while(top!=() str2j=top;j+;top=GetTop(&Op);Pop(&Op,e); break;top=GetTop(&Op);Pop(&Op,e); while(top!=#) str2j=top;j+;top=GetTop(&Op); Pop(&Op,e); str2j=top; printf(转化后的后缀表达式为:%sn,str2); Selemtype counttem(char str) /计算后缀表达式的值SqStack S;InitStack(&S);int len;len=strlen(str);Selemtype A10;int m,n,p,e=NULL,k,E;int i,j,l,ch,zh; /zh为字符型转化为的整形数 for(i=0;ilen;i+)if(0stri&stri=9)k=i;j=0;while(0=strk&strk=9) /将字符型的一串数字转化为整形Aj=strk-48;j+;k+;ch=Aj-1; E=1;for(l=1;lj;l+) E=10*E;zh=Aj-l-1*E;ch+=zh;Push(&S,ch);i=k-1;else if(stri=+|stri=-|stri=*|stri=/) m=GetTop(&S);Pop(&S,e);n=GetTop(&S);Pop(&S,e);switch (stri)case+:p=m+n; break;case-:p=n-m; break;case*:p=n*m; break;case/:p=n/m; break;Push(&S,p);else if(stri= ) else if(stri=#) result=GetTop(&S); printf(表达式的运算结果为:%dn,result);return res
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中化学选修一课件
- 2025年各地中考语文试卷【 基础知识综合题】汇集练附答案解析
- 高一功率课件
- 竞业禁止协议执行中补偿金调整与争议解决合同
- 章珊情感破裂离婚协议书:财产分割及子女抚养权约定
- 离婚房产分割协议书中的共有权转让与变更合同
- 老旧小区改造简单承包拆迁及物业管理合同
- 离婚房产分割保障未成年子女教育、医疗、生活协议
- 职业教育改革方案报告
- 仪表设备检修预案
- GB/T 27021.3-2021合格评定管理体系审核认证机构要求第3部分:质量管理体系审核与认证能力要求
- 3000储罐预制安装施工方案
- 食品工程原理(课堂)课件
- 五年级上册数学课件-《练习一》北师大版 (共10张PPT)
- 移动通信5G关键技术分析课件
- 理想与前途教育主题班会
- 无人机操作与使用教案
- 自悯量表中文版
- 砌体工程实测实量记录表
- 生命科学上游产业专题研究:下一个10年的高景气大赛道
- 内科学课件:原发性支气管肺癌
评论
0/150
提交评论