c语言中缀后缀算术表达式求值用栈实现
更新时间:2023-11-17 14:58:01 阅读量: 教育文库 文档下载
c语言 中缀、后缀 算术表达式求值用栈实现
#include<stdio.h> #include<string.h> #include<malloc.h> #include<stdlib.h> #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; }
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语言中缀后缀算术表达式求值用栈实现11-17
Z-7版药分第七章-苯乙胺类拟肾上腺素药物的分析2011-10-1009-04
2015年二级建造师公路冲刺试卷五05-16
美丽的环岛路作文300字07-01
新苏教版小学六年级下册数学测试卷 第一单元 - 图文03-16
第七章 空间数据的统计分析_1_本07-20
我喜欢雨夜作文400字06-18
2017年海南省基金从业考前综合:指数基金和增强指数基金考试题12-23
检验科个人防护程培训记录08-30
2016售电公司准入与退出管理办法01-27
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 中缀
- 算术
- 表达式
- 后缀
- 语言
- 实现
- 2015年高考英语作文常见话题
- 2017年监理工程师延续注册(市政公用工程)考试及答案得83分
- 2016-2017学年高三物理备课组下学期工作计划
- 安徽重点项目-宿州智慧云计算产业园项目可行性研究报告
- 第三章 种子植物的营养器官- 湖北师范学院生命科学学院
- 世界史考研笔记
- 浅谈如何在初中数学教学中充分运用分层递进教学法
- 机械发展与环境保护意义论文
- 牛津译林版八年级下册英语期末测试题(word)
- 学习《中等职业学校教师专业标准》的心得论文
- 西南科技大学机电2016复习题
- 9.11事件后美国的东北亚战略
- 中国环境问题现状及其对策考试答案(在线培训)100分
- 《我和我的祖国》声乐鉴赏教案
- 基础化学第二章习题加答案
- 北京大学“公司上市”培育班课程体系-第二模块
- 模拟电子技术和数字电技术 课程设计
- 苏教版小学科学三年级上册,演示实验记录,观察水
- 2012-2013学年第一学期语文教研组工作总结2012
- 建设你的知识结构:和君推荐阅读书目单V2016 - 图文