版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、从“工具认知”到“场景关联”:为什么是栈?演讲人CONTENTS从“工具认知”到“场景关联”:为什么是栈?栈的“双重角色”:表达式求值的底层逻辑从“普通计算”到“高精度”:栈的扩展应用教学实践中的常见问题与解决策略总结:栈——表达式求值的“智能调度员”目录2025高中信息技术数据结构的栈在表达式求值的高精度算法课件作为一名深耕高中信息技术教学十余年的教师,我始终相信:数据结构不是抽象的符号游戏,而是解决实际问题的“思维工具”。今天,我们将聚焦“栈”这一经典数据结构,探讨它在表达式求值——尤其是高精度算法中的核心作用。这既是对教材中“栈的应用”章节的深化,也是连接理论与实践的重要桥梁。01从“工具认知”到“场景关联”:为什么是栈?1栈的基础特性回顾栈(Stack)是一种遵循“后进先出”(LIFO,LastInFirstOut)原则的线性数据结构。它的核心操作只有两个:压入(Push)和弹出(Pop),这决定了它“只允许在一端操作”的特性。就像我们叠放餐盘——最后放上去的盘子最先被使用,栈的这种“顺序约束”使其在需要“回溯”或“暂存中间状态”的场景中表现卓越。在日常教学中,我常让学生用生活实例类比栈的应用:浏览器的“后退”功能(每次访问的新页面压入栈,后退时弹出)、程序调用中的方法栈(主函数调用子函数,子函数调用孙函数,返回时按逆序弹出)。这些例子能帮助学生快速建立“栈=顺序约束的暂存空间”的直观认知。2表达式求值的核心挑战1当我们需要计算一个复杂的数学表达式(如“3*(12345+67890)-√(16)/2”)时,核心挑战在于两点:2运算顺序的正确性:需遵循“括号优先、乘除先于加减、同级从左到右”的规则;3大数运算的精度问题:当操作数超过普通整型(如32位/64位)的存储范围时(例如1000位的数字相乘),常规数据类型无法存储中间结果,需采用高精度算法。4此时,栈的“顺序控制”和“暂存”特性恰好能解决这两个问题:用栈管理操作符的优先级,确保运算顺序正确;用栈或数组存储大数的每一位,实现逐位计算。02栈的“双重角色”:表达式求值的底层逻辑栈的“双重角色”:表达式求值的底层逻辑表达式求值的完整流程可分为两个阶段:中缀表达式转后缀表达式(逆波兰表达式)和后缀表达式的求值。在这两个阶段中,栈分别扮演“规则执行者”和“计算引擎”的角色。1阶段一:中缀转后缀——用栈管理操作符优先级中缀表达式是我们最熟悉的表达式形式(如“a+bc”),但计算机难以直接处理,因为它需要动态判断操作符的优先级。后缀表达式(如“abc+”)则将操作符置于操作数之后,无需括号即可明确运算顺序,更适合计算机处理。转换规则与栈的作用:初始化一个“操作符栈”和一个“结果队列”;从左到右遍历中缀表达式的每个元素:若为操作数,直接加入结果队列;若为左括号“(”,压入操作符栈;若为右括号“)”,则不断弹出栈顶操作符到结果队列,直到遇到左括号(左括号弹出但不加入队列);1阶段一:中缀转后缀——用栈管理操作符优先级若为普通操作符(+、-、*、/等),则比较其与栈顶操作符的优先级:若当前操作符优先级高于栈顶,压入栈;否则(或等于),弹出栈顶操作符到结果队列,重复此步骤直到栈为空或遇到更低优先级的操作符,再将当前操作符压入栈;遍历结束后,将操作符栈中剩余的操作符依次弹出到结果队列。案例演示(以“3+5*((2-4)/6)^2”为例):扫描“3”→结果队列:[3];扫描“+”→栈空,压入栈→栈:[+];扫描“5”→结果队列:[3,5];扫描“”→栈顶是“+”(优先级低于“”),压入栈→栈:[+,*];扫描“(”→压入栈→栈:[+,*,(];1阶段一:中缀转后缀——用栈管理操作符优先级扫描“(”→压入栈→栈:[+,*,(,(];扫描“2”→结果队列:[3,5,2];扫描“-”→栈顶是“(”,压入栈→栈:[+,*,(,(,-];扫描“4”→结果队列:[3,5,2,4];扫描“)”→弹出“-”到结果队列,弹出“(”(不加入队列)→结果队列:[3,5,2,4,-],栈:[+,*,(];扫描“/”→栈顶是“(”,压入栈→栈:[+,*,(,/];扫描“6”→结果队列:[3,5,2,4,-,6];扫描“)”→弹出“/”到结果队列,弹出“(”(不加入队列)→结果队列:[3,5,2,4,-,6,/],栈:[+,*];1阶段一:中缀转后缀——用栈管理操作符优先级04030102扫描“^”→栈顶是“”(优先级低于“^”),压入栈→栈:[+,,^];扫描“2”→结果队列:[3,5,2,4,-,6,/,2];遍历结束,弹出栈中剩余操作符“^”“”“+”→最终后缀表达式:[3,5,2,4,-,6,/,2,^,,+]。这个过程中,操作符栈像一个“裁判”,严格按照优先级规则控制操作符的输出顺序,确保后缀表达式的运算顺序与原中缀表达式一致。2阶段二:后缀表达式求值——用栈执行具体计算后缀表达式的求值只需一个“操作数栈”:从左到右遍历每个元素,遇到操作数则压入栈;遇到操作符则弹出栈顶两个数(注意顺序:后弹出的是左操作数,先弹出的是右操作数),执行运算后将结果压回栈。最终栈中唯一元素即为计算结果。案例延续(以上述后缀表达式“3524-6/2^*+”为例):压入3→栈:[3];压入5→栈:[3,5];压入2→栈:[3,5,2];压入4→栈:[3,5,2,4];遇到“-”→弹出4和2→2-4=-2→压入-2→栈:[3,5,-2];压入6→栈:[3,5,-2,6];2阶段二:后缀表达式求值——用栈执行具体计算遇到“+”→弹出0.555和3→3+0.555=3.555→栈:[3.555];05最终结果为3.555,与原中缀表达式计算结果一致。06遇到“^”→弹出2和-0.333→(-0.333)^2≈0.111→压入0.111→栈:[3,5,0.111];03遇到“”→弹出0.111和5→50.111≈0.555→压入0.555→栈:[3,0.555];04遇到“/”→弹出6和-2→-2/6≈-0.333→压入-0.333→栈:[3,5,-0.333];01压入2→栈:[3,5,-0.333,2];0203从“普通计算”到“高精度”:栈的扩展应用从“普通计算”到“高精度”:栈的扩展应用前面的案例中,操作数都是较小的数值(如3、5、2),但实际应用中,我们可能需要处理“12345678901234567890”这样的超大数,此时普通整型(int)或长整型(long)无法存储(64位long最大约9e18),必须采用高精度算法——用数组或字符串存储每一位数字,逐位计算。1高精度算法的核心思想高精度运算的本质是“模拟手工计算”:将大数的每一位存储在数组中(通常低位在前或高位在前,需统一规则),然后按照加减乘除的手工计算步骤,逐位处理进位或借位。例如:加法:从低位到高位逐位相加,记录进位;减法:从低位到高位逐位相减,处理借位;乘法:每一位相乘后累加,处理进位;除法:从高位到低位试商,处理余数。栈在其中的作用主要是暂存中间结果和统一处理顺序。例如,在乘法中,每一位相乘的结果需要按位对齐后相加,此时可以用栈来暂存每一步的部分积,确保相加顺序正确。2高精度加法与栈的结合(以十进制为例)假设我们要计算两个大数A(aₙaₙ₋₁…a₁a₀)和B(bₘbₘ₋₁…b₁b₀)的和,其中a₀、b₀是个位,a₁、b₁是十位,以此类推。步骤如下:对齐位数:将两个数的低位对齐(个位对个位),不足的高位补0;逐位相加:从个位开始(i=0),计算cᵢ=aᵢ+bᵢ+carry(carry为前一位的进位,初始为0);处理进位:当前位的结果为cᵢ%10,新的carry为cᵢ//10;存储结果:将每一位的计算结果压入栈(或存入数组),最终弹出栈得到高位到低位的结果。案例:计算“999”+“999”:2高精度加法与栈的结合(以十进制为例)十位:9+9+1=19→结果位9,carry=1→栈:[8,9];最高位进位1→栈:[8,9,9,1];个位:9+9+0=18→结果位8,carry=1→栈:[8];百位:9+9+1=19→结果位9,carry=1→栈:[8,9,9];弹出栈得到结果:1998(注意栈是后进先出,所以弹出顺序是1→9→9→8,组合为1998)。这里栈的作用是“逆序存储”,因为手工计算时从低位开始,但结果需要高位在前,栈的弹出顺序恰好满足这一需求。0102030405063高精度乘法与栈的深度协同高精度乘法更复杂,需计算每一位的部分积并累加。以A×B为例(A有n位,B有m位),结果最多有n+m位。步骤如下:分解部分积:B的每一位bⱼ(从低位到高位)与A相乘,得到部分积Pⱼ,其中Pⱼ的低位需补j个0(因为bⱼ是10ʲ位上的数);累加部分积:将所有Pⱼ相加,得到最终结果;栈的应用:每个部分积Pⱼ可以用栈暂存,累加时按位对齐后逐位相加(类似高精度加法)。案例:计算“123”ד45”(即123×45=5535):B的个位是5(j=0),部分积P₀=123×5=615→栈:[615];3高精度乘法与栈的深度协同B的十位是4(j=1),部分积P₁=123×4=492,补1个0→4920→栈:[615,4920];1弹出栈中的部分积,进行高精度加法:615+4920=5535。2这里栈不仅存储了部分积,还通过弹出顺序确保了从低位到高位的累加顺序,避免了手工计算时的错位问题。304教学实践中的常见问题与解决策略教学实践中的常见问题与解决策略在多年教学中,我发现学生在“栈与表达式求值”的学习中常遇到以下问题,需重点关注:1操作符优先级的混淆学生容易忘记“^(幂运算)>*/>+-”的优先级顺序,或在处理括号时遗漏“左括号在栈中的优先级最低”的规则。解决方法是:制作优先级表(如:^=3,*/=2,+-=1,(=0),要求学生记忆并在转换时对照;用颜色标记括号(如红色表示左括号,蓝色表示右括号),增强视觉区分。2后缀表达式求值时的操作数顺序错误例如,计算“ab-”时,学生可能误算为b-a而非a-b。解决方法是:强调“先弹出的是右操作数,后弹出的是左操作数”(如“ab-”=a-b);用具体数字演示错误操作的后果(如“53-”正确为2,错误计算为-2)。3高精度运算的进位/借位处理错误学生在逐位计算时,常忘记传递进位或处理借位(如加法中最高位进位遗漏,减法中连续借位错误)。解决方法是:01用“竖式计算”对比演示,例如在黑板上同步写出手工计算和栈操作的步骤;02设计“进位跟踪表”,记录每一位的计算值和进位值,帮助学生逐步验证。0305总结:栈——表达式求值的“智能调度员”总结:栈——表达式求值的“智能调度员”回顾整节课的内容,我们可以用三句话总结栈的核心作用:规则的执行者:在中缀转后缀的过程中,操作符栈通过优先级规则,确保运算顺序与数学定义一致;计算的引擎:在后缀表达式求值中,操作数栈通过“压入-弹出”操作,高效完成每一步运算;大数的守护者:在高精度算法中,栈通过暂存中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026高三名校联考高分作文范文(11篇)
- 基于云计算的远程控制系统设计与实现
- 护理课件设计工具及比较
- 2026年江西水利职业学院单独招生《职业适应性测试》模拟试题及参考答案
- 透明度间2026年文化娱乐项目合作合同协议
- 2025年虚拟试衣系统的数据库读写分离方案设计
- 联想技术客服面试技巧与注意事项
- 基于移动互联网的远程医疗服务应用研究
- 零售业店长招聘面试全解全析
- 4.10.2保护人身权 课件
- 小儿股静脉抽血课件
- 2026年湖南有色金属职业技术学院单招职业技能考试题库附答案
- 暖通高效机房设计
- 建筑毕业论文2000字
- 多器官功能衰竭长期卧床患者支持方案
- 2025年江西机电职业技术学院单招职业技能测试题库附答案
- 财务共享服务在房地产行业中的应用可行性研究报告
- 植物向日葵养护知识培训课件
- 幼儿园课件:《体能大循环的有效开展策略》
- 医药卫生人员进修申请表
- (正式版)DB15∕T 4138-2025 《餐饮场所使用醇基燃料消防安全管理规范》
评论
0/150
提交评论