C语言实现中缀、后缀、前缀表达式-相互转化并求值.doc 立即下载
2024-09-09
约8.4千字
约20页
0
273KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

C语言实现中缀、后缀、前缀表达式-相互转化并求值.doc

C语言实现中缀、后缀、前缀表达式-相互转化并求值.doc

预览

免费试读已结束,剩余 15 页请下载文档后查看

5 金币

下载文档

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

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

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

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

....
/NUMPAGES20
1.问题描述
(1)表达式求值问题
表达式是数据运算的基本形式。人们的书写习惯是中缀式,如:11+22*(7-4)/3。中缀式的计算按运算符的优先级与括号优先的原则,相同级别从左到右进行计算。表达式还有后缀式(如:2274-*3/11+)和前缀式(如:+11/*22–743)。后缀表达式和前缀表达式中没有括号,给计算带来方便。如后缀式计算时按运算符出现的先后进行计算。本设计的主要任务是进行表达式形式的转换与不同形式的表达式计算。
数据结构设计
(1)表达式求值问题
由于表达式中有字符与数字两种类型,故定义结点一个标志域data,标志结点存储的为字符data=2还是数字data=1,再寻找结点中对应的存储位置,读取数字域data1,字符域data2。而在前缀表达式时,存在表达式逆序,因表达式类型不统一,用栈逆序极不方便,选择构建双向链表,存储表达式。
typedefstructNode//定义存储中缀表达式的结点类型
{intdata;
intdata1;
chardata2;
structNode*next;
}Lnode;

typedefstructNode2//定义存储前缀表达式的结点类型
{intdata;
intdata1;
chardata2;
structNode2*next;
structNode2*prior;
}Lnode2;
运行、测试与分析
(1)表达式求值问题
(1)按提示输入中缀表达式,如图1.1所示。如输入中缀表达式不正确,提示输入有误,如图1.2,1.3所示。

图1.1

图1.2

图1.3
选择表达式转换并求值方式。按“1”选择中缀表达式求值,如图1.4所示。

图1.4
(3)按“2”选择中缀表达式转变为后缀表达式并求值,如图1.5所示。

图1.5
按“3”选择中缀表达式转变为前缀表达式并求值,如图1.6所示。

图1.6
附录:源代码

(1)表达式求值问题
#include<stdio.h>
#include<stdlib.h>
#defineMAXNUM100
typedefstructNode//定义存储中缀表达式的结点类型
{intdata;
intdata1;
chardata2;
structNode*next;
}Lnode;

typedefstructNode2//定义存储前缀表达式的结点类型
{intdata;
intdata1;
chardata2;
structNode2*next;
structNode2*prior;
}Lnode2;

typedefintselemtype1;//定义运算数栈的结点

typedefstruct//定义运算数栈的类型
{selemtype1*base;
selemtype1*top;
}sqstack1;

voidInitStack1(sqstack1&s)//新建一个空运算数栈
{s.base=(selemtype1*)malloc(MAXNUM*sizeof(selemtype1));
s.top=s.base;
if(!s.base)printf("出错:申请空间失败!\n");
}

voidPush1(sqstack1&s,selemtype1&e)//运算数栈,入栈:插入元素e为新的栈顶元素
{if(s.top-s.base>=MAXNUM)
printf("出错:表达式过长!1\n");
*s.top++=e;
}

voidGetTop1(sqstack1s,selemtype1&e)//运算数栈,用e返回栈顶元素
{e=*(s.top-1);
}

voidPopopnd1(sqstack1&s,selemtype1&e)//运算数栈,退栈:删除栈顶元素,并用e返回其值
{e=*--s.top;
}

intstackempy1(sqstack1s)//运算数栈,若为空栈返回1,否则返回0
{if(s.top==s.base)return1;
elsereturn0;
}


typedefcharselemtype2;//定义运算符栈的结点类型


typedefstruct//定义运算符栈类型
{selemtype2*base;
selemtype2*top;
}sqstack2;

voidInitStack2(sqstack2&s)//新建一个空运算符栈
{s.base=(selemtype2*)malloc(MAXNUM*sizeof(selemtype2));
s.top=s.base;
if(!s.base)printf("出错:申请空间失败!\n");
}

voidPush2(sqstack2&s,selemtype2&e)//运算符栈,入栈:
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

C语言实现中缀、后缀、前缀表达式-相互转化并求值

文档大小:273KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用