- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据结构》课程设计
表达式求值
班级:
学号:
姓名:
指导老师:
表达式求值
问题描述
要求对包含加、减、乘、除、括号运算符的任意整型表达式进行求解。
设计思路
这个程序的关键是对数字与运算符的判断和运算符优先级的判断,以及出栈的运算。建立两个栈,分别存储数字与运算符,栈1存运算符,栈2存数字。依次读取表达式的字符串,先判断是数字还是运算符,如果是数字不能马上压入栈2,因为可能是大于10的数字,应该继续循环,如果还是数字,则利用计算保存数值,直到指到运算符时停止,将计算后的数字压入栈2。压入运算符之前先将要压入的与栈顶的运算符优先级相比较,如果栈顶是‘(’而当前不是‘)’,则不需比较优先级,直接压入;如果栈顶是‘(’,当前是‘)’,则抵消(弹出‘(’,指向表达式下一个字符);若当前的运算符优先级大于栈顶的,则压入;若当前的运算符优先级小于栈內时,弹出栈顶的运算符,同时弹出两组数字,经过运算符的运算后再重新压到栈内。为了方便判断运算结束,在存储运算符之前先将‘#’压入栈1中,在输入表达式时以“#”结束,所以可以以运算符==‘#’并且栈1顶==‘#’来结束运算,弹出栈2的数值,即为表达式求值的最终结果。
上述操作的算法步骤:
初始化算符S1,数字栈S2;,将‘#’压入算符栈S1中。
读表达式字符=w。
当栈顶为‘#’并且w也是‘#’时结束;否则循环做下列步骤:
(3-1)如果w是数字,存储到m,再经过计算存储到num中。m=w-‘0’;num=num*pow(10,n)+m;n++;读下一个字符=w,如果是运算符,则跳出循环;转3-2。
(3-2)w若是运算符,则:
(3-2-1)如果栈顶为‘(’并且w为‘)’则‘(’出栈,读下一个字符=w;转(3)。
(3-2-2)如果栈顶为‘(’或者栈顶优先级小于w优先级,则w入栈,读下一个字符=w;转(3)。否则:从算符栈中出栈,并从数字栈中弹出两组数字进行运算,将结果重新压入数字栈,转(3)。
数据结构设计
前面提到,要用栈存储数据,由于一个数字一个运算符,所以要定义两个不同的栈,栈1的运算符为字符型;栈2的数字为浮点型,以便运算大数字。再给存储的数据个数加个上制。具体结构定义如下:
#define MAXSIZE 100
typedef struct{
char data[MAXSIZE]; /*字符型,存储运算符*/
int top;
}charSeqStack,*charPSeqStack;
typedef struct{
double data[MAXSIZE]; /*浮点型,存储数字*/
int top;
}SeqStack,*PSeqStack;
功能函数设计
(1)判断操作数的函数isnum()
判断当前所指字符是否属于数字,是就返回‘1’,不是返回‘0’。
(2)求运算符优先级函数priority()
为了方便判断运算符优先级,先利用switch函数将不同的运算符返回不同的整型数字,再根据数字的大小判断优先级。‘+’、‘-’优先级相同,返回相同数字,‘*’、‘/’也是。
(3)表达式求值函数infix_value()
此函数是直接按照设计思路完成问题要求的函数,其中要调用到判断操作符的函数isnum()和求运算符优先级的函数priority()。循环结束弹出栈2的数值,并返回。
主函数main()
定义一个数组存储表达式整个字符串,将返回的数值直接赋到浮点型的result,输出result。
两个栈的函数设计:
栈的初始化函数charInit_SeqStack()
Init_SeqStack()
判栈空 Empty_SeqStack()
charEmpty_SeqStack()
入栈函数 Push_SeqStack()
charPush_SeqStack()
出栈函数 Pop_SeqStack()
charPop_SeqStack()
取栈顶函数 GetTop_SeqStack()
charGetTop_SeqStack()
销毁栈 Destroy_SeqStack()
charDestroy_SeqStack()
程序代码
#includestdio.h
#includestdlib.h
#includemath.h
#define MAXSIZE 100
typedef struct{
double data[MAXSIZE];
int top;
}SeqStack,*PSeqStack;
typedef str
您可能关注的文档
- 《数据库课程设计报告-图书借阅管理系统》.doc
- 《数据库课程设计报告-学生选课管理系统课程设计》.doc
- 《数据库课程设计报告-学生选课管理系统》.doc
- 《数据库课程设计报告-校友录系统设计》.doc
- 《数据库课程设计报告-手机进销存管理系统》.doc
- 《数据库课程设计报告-考勤管理系统数据库设计》.doc
- 《数据库课程设计报告-汽车管理系统》.doc
- 《数据库课程设计报告-电力机车牵引力计算系统》.doc
- 《数据库课程设计报告_学籍管理系统》.doc
- 《数据库课程设计报告-超市进销存管理系统设计》.doc
- 深度解析(2026)《ISO 22002-12025食品安全前提方案—第1部分:食品制造》.pptx
- 深度解析(2026)《ISO 22002-52025食品安全前提方案—第5部分:运输和储存》.pptx
- 深度解析(2026)《ISO 22002-42025 食品安全前提方案 — 第4部分:食品包装制造》.pptx
- 徒步活动策划方案.doc
- 深度解析(2026)《ISO 22002-62025食品安全前提方案—第6部分:饲料及动物食品生产》.pptx
- 2026年新版郯城期末真题卷.doc
- 深度解析(2026)《ISO 22476-72012岩土工程勘察与测试 — 现场测试 — 第7部分:钻孔千斤顶试验》.pptx
- 深度解析(2026)《ISO 22090-22014 船舶与海洋技术 — 航向传送装置(THD) — 第2部分:地磁原理》.pptx
- 深度解析(2026)《ISO 23584-22012 光学和光子学 — 参考字典规范 — 第 2 部分:类与特性定义》:构建智能制造数据基石的专家视角与未来展望.pptx
- 深度解析(2026)《ISO 22932-92025 Mining — Vocabulary — Part 9 Drainage》:构建未来矿山“水脉”治理与可持续发展的新语言体系.pptx
最近下载
- 五年级数学上册用简便方法计算复习(共24张PPT).pptx VIP
- 大学英语四级强化知到智慧树期末考试答案题库2024年秋哈尔滨理工大学.docx VIP
- 2023年税务师继续教育题库及完整答案【夺冠系列】.docx
- 天津市南开区2020-2021学年五年级上学期数学期末试卷.docx VIP
- 证券从业之证券市场基本法律法规考试题库(考点梳理).docx
- 环境影响评价工程师之环评法律法规题库及参考答案【精练】.docx
- 2023年税务师继续教育题库附答案(基础题).docx
- 金庸群侠传x技能_奥义.xls VIP
- 2023年税务师继续教育题库(历年真题)word版.docx
- 2023年国家公务员考试题库含完整答案【夺冠】.docx
原创力文档


文档评论(0)