首页 c语言 中缀、后缀 算术表达式求值用栈实现

c语言 中缀、后缀 算术表达式求值用栈实现

举报
开通vip

c语言 中缀、后缀 算术表达式求值用栈实现c语言 中缀、后缀 算术表达式求值用栈实现 #include #include #include #include #define MaxSize 50 typedef struct { float data[MaxSize]; int top; }OpStack; typedef struct { char data[MaxSize]; int top; }SeqStack; void InitStack(SeqStack *S);//初始化栈 int StackEmpty(SeqSta...

c语言 中缀、后缀 算术表达式求值用栈实现
c语言 中缀、后缀 算术 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式求值用栈实现 #include #include #include #include #define MaxSize 50 typedef struct { float data[MaxSize]; int top; }OpStack; typedef struct { char data[MaxSize]; int top; }SeqStack; void InitStack(SeqStack *S);//初始化栈 int StackEmpty(SeqStack S);//判断栈是否为空 int PushStack(SeqStack *S,char e);//进栈 int PopStack(SeqStack *S,char *e);//删除栈顶元素 int GetTop(SeqStack S,char *e);//取栈顶元素 void TranslateExpress(char s1[],char s2[]);//将中缀表达式转化为后缀表达式 float ComputeExpress(char s[]);//计算后缀表达式的值 void main() { char a[MaxSize],b[MaxSize]; float f; printf("请输入一个算术表达式:\n"); gets(a); printf("中缀表达式为:%s\n",a); TranslateExpress(a,b); printf("后缀表达式为:%s\n",b); f=ComputeExpress(b); printf("计算结果:%f\n",f); } void InitStack(SeqStack *S)//初始化栈 { S->top=0; } int StackEmpty(SeqStack S)//判断栈是否为空 { if(S.top ==0) return 1; else return 0; } int PushStack(SeqStack *S,char e)//进栈 { if(S->top>=MaxSize) { printf("栈已满,不能进栈!"); return 0; } else { S->data[S->top]=e; S->top++; return 1; } } int PopStack(SeqStack *S,char *e)//删除栈顶元素 { if(S->top==0) { printf("栈已空\n"); return 0; } else { S->top--; *e=S->data[S->top]; return 1; } } int GetTop(SeqStack S,char *e)//取栈顶元素 { if(S.top<=0) { printf("栈已空"); return 0; } else { *e=S.data[S.top-1]; return 1; } } void TranslateExpress(char str[],char exp[])//把中缀表达式转换为后缀表达式 { SeqStack S; char ch; char e; int i=0,j=0; InitStack(&S); ch=str[i]; i++; while(ch!='\0') //依次扫描中缀表达式 { switch(ch) { case'(': PushStack(&S,ch); break; case')': while(GetTop(S,&e)&&e!='(') { PopStack(&S,&e); exp[j]=e; j++; } PopStack(&S,&e); break; case'+': case'-': while(!StackEmpty(S)&&GetTop(S,&e)&&e!='(') { PopStack(&S,&e); exp[j]=e; j++; } PushStack(&S,ch); break; case'*': case'/': while(!StackEmpty(S)&&GetTop(S,&e)&&e=='/'||e=='*') { PopStack(&S,&e); exp[j]=e; j++; } PushStack(&S,ch); break; //是空格就忽略 case' ': break; default: while(ch>='0'&&ch<='9') { exp[j]=ch; j++; ch=str[i]; i++; } i--; exp[j]=' '; j++; } ch=str[i]; i++; } while(!StackEmpty(S)) //将栈中剩余运算符出栈 { PopStack(&S,&e); exp[j]=e; j++; } exp[j]='\0'; } float ComputeExpress(char a[])//计算后缀表达式的值 { OpStack S; int i=0; float x1,x2,value; float result; S.top=-1; while(a[i]!='\0') //依次扫描后缀表达式 { if(a[i]!=' '&&a[i]>='0'&&a[i]<='9')//如果是数字 { value=0; while(a[i]!=' ') //如果不是空格 { value=10*value+a[i]-'0'; i++; } S.top++; S.data[S.top]=value; //处理后进栈 } else //如果是运算符 { switch(a[i]) { case'+': x1=S.data[S.top]; S.top--; x2=S.data[S.top]; S.top--; result=x1+x2; S.top++; S.data[S.top]=result; break; case'-': x1=S.data[S.top]; S.top--; x2=S.data[S.top]; S.top--; result=x2-x1; S.top++; S.data[S.top]=result; break; case'*': x1=S.data[S.top]; S.top--; x2=S.data[S.top]; S.top--; result=x1*x2; S.top++; S.data[S.top]=result; break; case'/': x1=S.data[S.top]; S.top--; x2=S.data[S.top]; S.top--; result=x2/x1; S.top++; S.data[S.top]=result; break; } i++; } } if(!S.top!=-1) //如果栈不空,将结果出栈并返回 { result=S.data[S.top]; S.top--; if(S.top==-1) return result; else { printf("表达式错误"); exit(-1); } } return 0; }
本文档为【c语言 中缀、后缀 算术表达式求值用栈实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_833902
暂无简介~
格式:doc
大小:23KB
软件:Word
页数:10
分类:生活休闲
上传时间:2017-10-30
浏览量:70