分享
分销 收藏 举报 申诉 / 14
播放页_导航下方通栏广告

类型栈及其应用.ppt

  • 上传人:天****
  • 文档编号:1924021
  • 上传时间:2024-05-11
  • 格式:PPT
  • 页数:14
  • 大小:467KB
  • 下载积分:8 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    及其 应用
    资源描述:
    栈及其应用安庆四中 范江文.在现实生活中,常常会出现一些特殊的线性结构的情形。例如,我们在洗碗时,总是将最后洗的碗叠在当前一列碗的最上面,而用的时候总是将最上面的碗,也就是最后洗的碗先拿去用。类似的,储蓄罐、瓷坛等只有一个开口的容器存放物品时,都是具有最后放的东西最先倒出来的特性。图1是某个火车站的车厢调度储存室,进站的火车厢只能从左端进入,并从左端出站。这个特殊的调度室也具有一端封闭的特性,因此最后调入的火车厢肯定最先调出。我们将具有先进后出特性的特殊装置,称之为栈。一、栈的定义一、栈的定义 从上面的例子,我们可以看出,栈(Stack)是一种特殊的线性表,它的特殊之处在于限定仅能在表的一端进行插入或删除操作。换句话说,栈的操作是按后进先出的顺序处理数据,因此栈又称后进先出表(Lastn First Out,LIFO)。对于一个栈来说,我们习惯上称它的可操作端为栈顶(Top),另一端为栈底(Bottom)。设栈S=(a1,a2,,an),a1端为栈底,an端为栈顶,则有:1.插入一个元素an+1后,栈更新为S=(a1,a2,.,an,an+1)2.从栈中删除一个元素后,栈更新为S=(a1,a2,.,an-1)特别的,不含任何元素的栈称为空栈。.二、栈的实现二、栈的实现1.1.栈的顺序存储结构栈的顺序存储结构 我们称用顺序结构存储的栈为顺序栈(array-based stack),即:利用连续的存储单元依次记录栈的所有元素。一般来说,使用一维数组B存储栈的所有元素,变量top记录栈的大小,将s1叫作为栈底,stop为栈顶。顺序栈Stack定义如下:TYPE Stack=record top:integer;栈顶指针 s:array 1.Maxlength of elemtype;记录栈中元素的线性表)Procedure init;初始化栈function push(var st:stack;a:elemtype):boolean;压栈,若栈不满,则在栈顶插入元素a,返回 true;否则返回falsefunction pop(stack):elemtype;弹栈,若栈不为空则删除栈顶元素并返回元素值;否则返回NULLprocedure stack.init;Top-0 栈置空function push(var st:stack;a:elemtype):boolean;If topmaxlength then begin inc(st.top);st.sst.top:=a;end else push:=fasle;function pop():elemtype;If st.top=0 then 栈为空 else pop:=st.sst.top;dec(st.top);.三、栈的应用三、栈的应用(一)(一)堆栈具有先进后出(后进先出)的特性,凡是具有这种特性的题目我们都可以用堆栈来试一试。例1编制一个满足下列要求的程序:对于输人的任意一个非负十进制整数,打印输出与其等值的八进制数。例如:(1348)10=(2504)8例2括弧匹配检验:假设表达式中允许包含两种括号即圆括号和方括号,其嵌套的顺序随意,如()或()等为正确的匹配,()或()或()均为错误的匹配。现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?这八进制的各个数位产生的顺序是从低位到高位的,而打印输出的顺序,一般来说应从高位到低位,这恰好和计算过程相反。所以,堆栈的用武之地出来了。具体做法就是把求到的数位先依次入栈,然后再依次出栈。看是否匹配,具体是看每个左括号是否有一个右括号跟它匹配。而且括号可以嵌套,要检查外层括号是否匹配,必须先检查内层的括号是否匹配,也就是先遇到的左括号后处理,这时,堆栈又有了用武之地。具体做法是遇到左括号就入栈,遇到右括号就出栈并判断是否匹配。当括号串全部处理完毕,而且堆栈为空,则是合法的,其他情况都是非法的。.例3给定N(N,X,X=).算法如下算法如下:function exp-cal:longint;inistack(optr);inisiack(opnd);初始化操作数和操作符栈push(optr,);预处理将压入操作符栈read(w);while not(w=)and(gettop(optr)=)DO表达式还没有处理完毕If not w in op then push(opnd,w);read(w)else case predede(op(gettop(optr),op(w)of比较optr栈顶元素和当前算符的优先级别:theta:=pop(optr);b:=pop(opnd);a:=pop(opnd);push(opnd,operate(a,theta,b);栈顶算符优先级高,从opnd中取出两个操作数进行计算X:writeln there is an error of express!);exit(1);Endreturn(gettop(opnd)endF.【例【例5】等价表达式】等价表达式问题描述问题描述 明明进行了中学之后,学到了代数表达式,有一天,他碰到一道很麻烦的选择题。这个题目的提干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些代数表达式是和提干中的表达式等价的。这个题目手算很麻烦,以为明明对计算编程很感兴趣,所以他想是不是可以用计算机来解决这个问题。假设你是明明,能完成这个问题吗?这个选择题中的每个表达式都满足下面的性质:1.表达式只可能包含一个变量a 2.表达式中出现的数都是正整数,而且都小于10000。3.表达式中可以包括四种运算+(加),一(减),*(乘),(乘幂),以及小括号(,)。小括号的优先级最高,其次是,然后是*,最后是+和-。+和-的优先级是相同的,相同优先级的运算从左到右进行。(注意:运算符+-*都是英文字符)4.幂指数只可能是1 到10之间的正整数(包括1和10)5.表达式内部、头部或者尾部都可能有一些多余的空格。下面是一些合理的表达式的例子:((a1)2)3,a*a+a-a,(a+a),9999+(a-a)*a,1+(a-a)3,1109.【输入】输入文件equal.in的第一行给出的是提干中的表达式。第二行是一个整数n(2=n=26),表示选项的个数。后面n行,每行包括一个选项中的表达式。这n个选项的标号分别是A,B,C,D.输入中的表达式的长度都不超过50个字符,而且保证选项中总有表达式和题干中的表达式是等价的,输出输出文件equal.out 包括一行,这一行包括一系列选项的标号,表示哪些选项是和题干中的表达式等价的。选项的标号按照字母顺序排列、而且之间没有空格。样例输入(a+1)2 3 (a-1)2+4*a a+1+a a2+2*a*1+12+10+a-a样例输出 AC数据规模l 对于30%的数据,表达式中只可能出现两种运茸符“+”和“-;对于其他的数据,四种运算符在表达式中都可能出现。对于全部的数据,表达式中却可能出现小括号。.【分析】这道题目是要我们判断有哪些表达式和给出的表达式本质相同。如果我们将每个表达式进行化简,然后进行相等判断,很难找到同一规则,最后都变成最简表达式,即使有统一规则,程序也比较复杂。注意到数学里面的恒等式的性质,如果两个表达式相等,那么对a取任意符合表达式条件的数值,两个表达式的计算结果一致。因此我们可以用抽样取值法,也就是对表达式中的变量a随机取若干个值代入若两个表达式的计算结果一致,则认为两个表达式等价。当然,抽样调查并不能保证所有,但如果抽样的数值比较好的话,从概率上分析,出错率会很低。算法流程如下:1.随机取20-30 个a 值2.将每个a的取值代入每个表达式,计算出每个表达式的结果.3.如果对每个取值,两个表达式的结果相等则认为它们是等价的表达式,否则不是。4.输出结果.这里需要注意一些小问题,在随机取值时,尽量取随机素数。另外,表达式可以出现连续的幂运算,这样计算的结果会很大。为了简化运算,我们可以将每次运算的中间结果对某大素数取余即可。需要注意的是幂运算的优先规则是从左到右运算.比如:A102=a20,而不是a100.练练 习习1、括弧匹配检验:假设表达式中允许包含两种括号即圆括号和方括号,其嵌套的顺序随意,如()或()等为正确的匹配,()或()或()均为错误的匹配。现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?2、例3给定N(N=100000)个数,找出每个数后面第一个比它大的数的编号。没有输出0。input:3 2 6 1 1 2output:3 3 0 6 6 03、利用栈实现算术表达式求值利用栈实现算术表达式求值编写一个包含有“+”、“-”、“,”、“/”、“(”、“)”等运算符的表达式,计算出该表达式的数值。4、等价表达式等价表达式.
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:栈及其应用.ppt
    链接地址:https://www.zixin.com.cn/doc/1924021.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork