0907Day2:栈及其应用.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
栈及其应用 信息学奥赛暑假培专题二 Day.2 栈 外特性:后进先出(LIFO) 交卷子 KTV的“点歌单” 作用:保护现场 逻辑结构:只在一端操作的线性表 数组实现: 元素 stack : array[1..maxn] of integer 栈顶指针 top 栈的存储表示 顺序栈的数据结构表示 const maxsize=栈的大小; type sqstktp=record elem: array[1..stack_size] of elemtp; top:0..maxsize; end 链栈 lnkstack=^node node =record elem:elemtp; top:lnkstack; end; 栈的基本操作 铁轨问题 例1:1,2,3,4,5 例2:5,4,3,2,1 例3:3,2,4,5,1 例4:3,1,4,5,2 思考? 输入1,2,…,n节火车厢,问有多少种出火车站的方法? 只有1节车厢,显然只有1种方法,即1. 有2节车厢,显然有2种出车厢的方法,12,21. 有3节车厢,显然有5种出车厢的方法, 123,132,213,231,321. 有4节车厢,显然有14种出车厢的方法, 1234,1324, 2134,2314,3214 ,1243 ,1432 ,1342,2143,2431 ,2341 ,3421 ,3241 ,4321 …… n节车厢,有多少方法 ? 分析 设f(n)表示有n节车厢的出站的方法数 那么,第1节车厢显然有进栈和不进栈两种方法. 不进栈的方法为f(n-1) 进栈的方法数,可以归结为元素1第i次出栈的所有可能性。 元素1排列在第i个位置,那么将整个序列分裂为2~i,1,i+1~n 两个部分。显然方法数为两个部分之积,如下: 典型试题 问题:算术达式求值 输入一个表达式,该表达式含有“+”、“-”、“*”、“/”、“(”、“)”和操作数,输入以@结束。 构造算符优先关系队列表 示例 算法框架 Function exp_reduced: oprandtype; inistack(optr);push(optr,’@’); inistack(opnd) read(w); while not ((w=‘@’) and (gettop(optr)=‘@’)) do If not w in op then [push(opnd,w);read(w)] else case predede(gettop(optr),w) of ‘‘:[push(optr,w);read(w)]; ‘=‘:[x:=pop(optr);read(w)]; ‘‘:[theta:=pop(optr);b:=pop(opnd);a:=pop(opnd); push(opnd,operate(a,theta,b))]; endc return(gettop(opnd)) endF 等价表达式 明明进了中学之后,学到了代数表达式。有一天,他碰到一个很麻烦的选择题。这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些代数表达式是和题干中的表达式等价的。 这个题目手算很麻烦,因为明明对计算机编程很感兴趣,所以他想是不是可以用计算机来解决这个问题。假设你是明明,能完成这个任务吗? 这个选择题中的每个表达式都满足下面的性质: 1.表达式只可能包含一个变量‘a’。 2.表达式中出现的数都是正整数,而且都小于10000。 3.表达式中可以包括四种运算‘+’(加),‘-’(减),‘*’(乘),‘^’(乘幂),以及小括号‘(’,‘)’。小括号的优先级最高,其次是‘^’,然后是‘*’,最后是‘+’和‘-’。‘+’和‘-’的优先级是相同的。相同优先级的运算从左到右进行。(注意:运算符‘+’,‘-’,‘*’,‘^’以及小括号‘(’,‘)’都是英文字符) 4.幂指数只可能是1到10之间的正整数(包括1和10)。 5. 表达式内部,头部或者尾部都可能有一些多余的空格。 下面是一些合理的表达式的例子: ((a^1) ^ 2)^3,a*a+a-a,((a+a)),9999+(a-a)*a,1 + (a -1)^3,1^10^9…… 【输入文件】 输入文件equal.in的第一行给出的是题干中的表达式。第二

文档评论(0)

天马行空 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档