




免费预览已结束,剩余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医疗器械采购协议合同
- 2025合法的医疗器械代理合同模板
- 学生安全家校协作指南
- 2025年河北省盐山县孟店中学初中学业水平模拟测试数学试卷
- 肿瘤靶向治疗
- 专家钓鱼岛与南海问题成中美关系紧张主要根源
- 【Meltwater融文】2025年社交媒体管理的AI革命中国品牌出海新策略345mb
- 湖南省三新协作体G10H11联盟大联考2024-2025学年高二下学期4月期中生物试题 含解析
- 浙江省衢州市五校联盟2024-2025学年高二下学期期中联考试题 生物含答案
- 高中语文教学设计(表格)
- 《胶体与界面化学》课件
- 台球店员工合同范例
- 池塘淤泥脱水固化施工方案
- 商业银行信息系统等级保护政策
- 基底节脑出血护理查房
- 2024年第三届浙江技能大赛(农机修理赛项)理论考试题库(含答案)
- 畲族非遗文化课程设计
- 《煤矿防治水细则》全文
- 2024年海南省高考地理试卷(含答案)
- 发动机大修免责协议书范本范本
- 文化强国课件
评论
0/150
提交评论