表达式求值(整数型).docx
上传人:sy****28 上传时间:2024-09-14 格式:DOCX 页数:6 大小:12KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

表达式求值(整数型).docx

表达式求值(整数型).docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

#include<stdio.h>#include<stdlib.h>#include<string.h>#definemax100typedefstruct{char*data;inttop;intstacksize;}seqstack;typedefstruct{int*data1;inttop1;intstacksize1;}seqstack1;intindigt(charch);intprior(charstr1,charstr2);//表达式表示栈intinitstack(seqstack&Ls){Ls.data=(char*)malloc(max*sizeof(char));if(Ls.data==NULL){printf("内存分配失败!\n");exit(0);}Ls.top=-1;Ls.stacksize=max;return1;}intpushstack(seqstack&Ls,charx){if(Ls.top==Ls.stacksize-1){printf("栈满!\n");return0;}Ls.top++;Ls.data[Ls.top]=x;return1;}charpopstack(seqstack&Ls){if(Ls.top==-1)printf("空栈!\n");returnLs.data[Ls.top--];}chargettop(seqstackLs){if(Ls.top==-1)printf("空栈!\n");returnLs.data[Ls.top];}//求值栈intinitstack1(seqstack1&Ls1){Ls1.data1=(int*)malloc(max*sizeof(int));if(Ls1.data1==NULL){printf("内存分配失败!\n");exit(0);}Ls1.top1=-1;Ls1.stacksize1=max;return1;}intpushstack1(seqstack1&Ls1,intx){if(Ls1.top1==max-1){printf("栈满!\n");return0;}Ls1.top1++;Ls1.data1[Ls1.top1]=x;return1;}intpopstack1(seqstack1&Ls1){if(Ls1.top1==-1)printf("空栈!\n");returnLs1.data1[Ls1.top1--];}//转换为后缀表达式voidTosuffix(char*p,char*suffix){seqstackL;inti=0,j=0;charch;initstack(L);pushstack(L,'#');while(p[i]!='#'){if(indigt(p[i]))suffix[j++]=p[i];elseswitch(p[i]){case'(':pushstack(L,p[i]);break;case')':ch=popstack(L);while(ch!='('){suffix[j++]=ch;ch=popstack(L);}break;default:suffix[j++]='';ch=gettop(L);while(prior(ch,p[i])){suffix[j++]=ch;ch=popstack(L);ch=gettop(L);}pushstack(L,p[i]);break;}i++;}while(L.top!=0){ch=popstack(L);suffix[j++]=ch;}suffix[j]='\0';}//操作符优先级比较intprior(charstr1,charstr2){switch(str1){case'(':case'#':return0;case'+':case'-':switch(str2){case'*':case'/':return0;case'#':case'+':case'-':return1;}break;case'*':case'/':return1;}}//操作符与操作数判断intindigt(char