- 1、本文档共71页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
同济大学计算机编程课件:Cds04
栈 表达式求值 队列 优先级队列 栈 ( Stack ) 只允许在一端插入和删除的线性表 允许插入和删除 的一端称为栈顶 (top),另一端称 为栈底(bottom) 特点 后进先出 (LIFO) 栈的抽象数据类型 栈的数组存储表示 — 顺序栈 栈的链接存储表示 — 链式栈 链式栈无栈满问题,空间可扩充 插入与删除仅在栈顶处执行 链式栈的栈顶在链头 适合于多栈操作 表达式求值 一个表达式由操作数(亦称运算对象)、操作符 (亦称运算符) 和分界符组成。 算术表达式有三种表示: 中缀(infix)表示 <操作数> <操作符> <操作数>,如 A+B; 前缀(prefix)表示 <操作符> <操作数> <操作数>,如 +AB; 后缀(postfix)表示 <操作数> <操作数> <操作符>,如 AB+; 表达式事例 中缀表达式 a + b * ( c - d ) - e / f 后缀表达式 a b c d - * + e f / - 表达式中相邻两个操作符的计算次序为: 优先级高的先计算; 优先级相同的自左向右计算; 当使用括号时从最内层括号开始计算。 一般表达式的操作符有4种类型: 算术操作符 如双目操作符(+、-、*、/ 和%)以及单目操作符(-)。 关系操作符 包括<、<=、==、!=、>=、>。这些操作符主要用于比较。 逻辑操作符 如与(&&)、或(||)、非(!)。 括号‘(’和‘)’ 它们的作用是改变运算顺序。 通过后缀表示计算表达式值的过程 顺序扫描表达式的每一项,根据它的类型做如下相应操作: 若该项是操作数,则将其压栈; 若该项是操作符<op>,则连续从栈中退出两个操作数Y和X,形成运算指令X<op>Y,并将计算结果重新压栈。 当表达式的所有项都扫描并处理完后,栈顶存放的就是最后的计算结果。 void Calculator :: Run ( ) { char ch; double newoperand; while ( cin >> ch, ch != ‘;’ ) { switch ( ch ) { case ‘+’ : case ‘-’ : case ‘*’ : case ‘/’ : DoOperator ( ch ); break; //计算 default : cin.putback ( ch ); //将字符放回输入流 cin >> newoperand; //读操作数 S.Push( newoperand ); } } } 利用栈将中缀表示转换为后缀表示 使用栈可将表达式的中缀表示转换成它的前缀表示和后缀表示。 为了实现这种转换,需要考虑各操作符的优先级。 各个算术操作符的优先级 isp叫做栈内(in stack priority)优先数 icp叫做栈外(in coming priority)优先数。 操作符优先数相等的情况只出现在括号配对或栈底的“;”号与输入流最后的“;”号配对时。 中缀表达式转换为后缀表达式的算法 操作符栈初始化,将结束符‘;’进栈。然后读入中缀表达式字符流的首字符ch。 重复执行以下步骤,直到ch = ‘;’,同时栈顶的操作符也是‘;’,停止循环。 若ch是操作数直接输出,读入下一个字符ch。 若ch是操作符,判断ch的优先级icp和位于栈顶的操作符op的优先级isp: 若 icp (ch) > isp (op),令ch进栈,读入下一个字符ch。 若 icp (ch) < isp (op),退栈并输出。 若 icp (ch) == isp (op),退栈但不输出,若退出的是“(”号读入下一个字符ch。 算法结束,输出序列即为所需的后缀表达式。 while ( ! s.IsEmpty( ) && ch != ';' ) if ( isdigit ( ch ) ) { cout << ch; cin.Get ( ch ); } else { if ( isp ( s.GetTop( ) ) < icp ( ch ) ) { s.Push ( ch ); cin.Get ( ch ); } else if ( isp ( s.GetTop( ) ) > icp ( ch ) )
您可能关注的文档
- 心理定势.ppt
- 电瓶维护PBT-300 蓄电池电导仪使用说明书.doc
- VESSEL GT-BS12气动打磨机主体分解图.doc
- 必检项目考题.doc
- BEC英语词汇表[精华].doc
- COLOMBI弹簧分离器.doc
- 三板模(小水口)结构介绍.ppt
- 血型的秘密.pptx
- Reiss 徐海艳.ppt
- 1-发育生物学.ppt
- 2024年煤炭工业合肥设计研究院限责任公司招聘31人历年高频难、易点(行政职业能力测验共500题)题.docx
- 2024年煤炭工业合肥设计研究院限责任公司招聘31人历年高频难、易点(行政职业能力测验共500题)题.docx
- 2024年煤炭工业合肥设计研究院限责任公司招聘31人历年高频难、易点(行政职业能力测验共500题)题.docx
- 2024年煤炭工业合肥设计研究院限责任公司招聘31人历年高频难、易点(行政职业能力测验共500题)题.docx
- 2024年煤炭工业合肥设计研究院限责任公司招聘31人历年高频难、易点(行政职业能力测验共500题)题.docx
- 2024年煤炭工业合肥设计研究院限责任公司招聘31人历年高频难、易点(行政职业能力测验共500题)题.docx
- 2024年煤炭工业合肥设计研究院限责任公司招聘31人历年高频难、易点(行政职业能力测验共500题)题.docx
- 2024年煤炭工业合肥设计研究院限责任公司招聘31人历年高频难、易点(行政职业能力测验共500题)题.docx
- 2024年煤炭工业合肥设计研究院限责任公司招聘31人历年高频难、易点(行政职业能力测验共500题)题.docx
- 2024年煤炭工业合肥设计研究院限责任公司招聘31人历年高频难、易点(行政职业能力测验共500题)题.docx
1亿VIP精品文档
相关文档
最近下载
- 劳务派遣管理员四级复习试卷一.docx
- DOBOT越疆 VisionStudio算法平台用户手册V4.1.2.pdf
- 党政会议座位牌姓名牌(可编辑打印).docx VIP
- 医学基础知识试题库.pdf VIP
- 圆管涵便桥施工地方案1.doc
- “讲道德有品行”专题讨论会发言稿:做一位讲道德有品行的优秀共产党员与“讲道德有品行”专题讨论会发言稿:讲道德、有品行是兴党之本―强化干净意识合集.doc VIP
- 鞋底、聚氨酯泡沫塑料片项目环评环境影响报告表.pdf
- 南昌市万华生化制品有限公司年产2500亿单位尿激酶、3000亿单位抑肽酶的GMP新建综合车间项目环境影响报告.docx VIP
- 防溺水安全专题教育ppt课件.pptx VIP
- reading images the grammar of visual文档.pdf
文档评论(0)