- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
栈(Stack )表达式求值队列 ( Queue )递归的概念递归与
栈 ( Stack ) 表达式求值 队列 ( Queue ) 递归的概念 递归与递归工作栈 递归与回溯 栈的主要操作 栈的数组表示 — 顺序栈 链式栈操作的实现 void InitStack ( LinkStack S ) { S = NULL; } void Push ( LinkStack S, SElemType x ) { StackNode *p = new StackNode; //创建新结点 p-data = x; //结点赋值 p-next = S; S = p; //链入栈顶 } 表达式求值 一个表达式由操作数(亦称运算对象)、操作符 (亦称运算符) 和分界符组成。 算术表达式有三种表示: 中缀(infix)表示 操作数 操作符 操作数,如 A+B; 前缀(prefix)表示 操作符 操作数 操作数,如 +AB; 后缀(postfix)表示 操作数 操作数 操作符,如 AB+; 表达式事例 中缀表达式 a + b * ( c - d ) - e / f 后缀表达式 a b c d - * + e f / - 表达式中相邻两个操作符的计算次序为: 优先级高的先计算; 优先级相同的自左向右计算; 当使用括号时从最内层括号开始计算。 应用后缀表示计算表达式的值 从左向右顺序地扫描表达式,并用一个栈暂存扫描到的操作数或计算结果。 在后缀表达式的计算顺序中已隐含了加括号的优先次序,括号在后缀表达式中不出现。 计算例 a b c d - * + e f ^ g / - 通过后缀表示计算表达式值的过程 顺序扫描表达式的每一项,根据它的类型做如下相应操作: 若该项是操作数,则将其压栈; 若该项是操作符op,则连续从栈中退出两个操作数Y和X,形成运算指令XopY,并将计算结果重新压栈。 当表达式的所有项都扫描并处理完后,栈顶存放的就是最后的计算结果。 void PostFixRun ( ) { stackchar S; char ch; while ( getchar(ch), ch != ‘;’ ) { switch ( ch ) { case ‘+’ : case ‘-’ : case ‘*’ : case ‘/’ : DoOperator ( S, ch ); break; //计算 default : Push ( S, ch ); } } } 应用中缀表示计算表达式的值 a + b * ( c - d ) - e ^ f / g 使用两个栈,操作符栈OPTR (operator),操作数栈OPND(operand) 为了实现这种计算,需要考虑各操作符的优先级 各个算术操作符的优先级 isp叫做栈内(in stack priority)优先数 icp叫做栈外(in coming priority)优先数。 操作符优先数相等的情况只出现在括号配对或栈底的“#”号与输入流最后的“#”号配对时。 中缀算术表达式求值 对中缀表达式求值的一般规则: (1) 建立并初始化OPTR栈和OPND栈,然后在OPTR栈中压入一个“#” (2) 从头扫描中缀表达式,取一字符送入ch。 (3) 当ch != ‘#’ 或OPTR栈的栈顶 != #时, 执行以下工作, 否则结束算法。此时在OPND栈的栈顶得到运算结果。 ① 若ch是操作数,进OPND栈,从中缀表达式取下一字符送入ch; ② 若ch是操作符,比较icp(ch)的优先级和isp(OPTR)的优先级: 若icp(ch) isp(OPTR),则ch进OPTR栈,从中缀表达式取下一字符送入ch; 若icp(ch) isp(OPTR),则从OPND栈退出a2和a1,从OPTR栈退出θ, 形成运算指令 (a1)θ(a2),结果进OPND栈; 若icp(ch) == isp(OPTR) 且ch == ),则从OPTR栈退出(,对消括号,然后从中缀表达式取下一字符送入ch; if ( icp( ch ) isp( op ) ) //栈顶优先级低 { Push ( OPTR, ch ); getchar ( ch ); } else if ( icp ( ch ) isp ( op ) ) { Pop( OP
您可能关注的文档
最近下载
- 国网基础试题题库及答案.doc VIP
- 江西财经大学《概率论》2023-2024学年第一学期期末试卷(经管类).pdf VIP
- SG-400 型锅炉烟气喷雾干燥-袋式脱硫除尘系统设计.docx VIP
- 2025年一级建造师公路实务真题卷(含解析).docx VIP
- 【甘肃卷】甘肃省部分学校2024-2025学年2025届高三第一(上)学期第一次(期末)联考(1.8-1.9)地理试卷含答案及解析.pdf VIP
- 大尺寸高质量氧化镓单晶衬底项目立项申请(仅供参考).docx
- 防盗门采购项目安装施工方案.doc VIP
- 防盗门采购项目运输方案.doc VIP
- 防盗门采购项目售后服务方案.doc VIP
- 单向板肋梁楼盖课程设计计算书.doc VIP
原创力文档


文档评论(0)