- 1、本文档共37页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
三栈16年汇编
后缀表达式求值 使用一个栈,当从左向右扫描表达式时,每遇到一个操作数就送入栈中保存,每遇到一个运算符就从栈中取出两个操作数进行当前的计算,然后把结果再入栈,直到整个表达式结束,这时送入栈顶的值就是结果。 例如:3*(7 – 2 ) (1)要正确求值,首先了解算术四则运算的规则: a. 从左算到右 b. 先乘除,后加减 c. 先括号内,后括号外 由此,此表达式的计算顺序为: 3*(7 – 2 )= 3 * 5 = 15 中序表达式计算 (2)根据上述三条运算规则,在运算的每一步中,对任意相继出现的算符?1和?2 ,都要比较优先权关系。 栈的应用(中缀表达式求值) + - * / ( ) # + - * / ( = ) # = 当前运算符 栈顶运算符 运算符的优先级比较 (3)算法思想: 设定两栈:操作符栈 OPTR ,操作数栈 OPND 栈初始化:设操作数栈 OPND 为空;操作符栈 OPTR 的栈底元素为表达式起始符 ‘#’; 依次读入字符:是操作数则入OPND栈,是操作符则要判断: if 当前表达式操作符 栈顶元素,则退栈、计算,结果压入OPND栈; 当前表达式操作符 = 栈顶元素且不为‘#’,脱括号(弹出左括号); 当前表达式操作符 栈顶元素,压入OPTR栈。 栈的应用(表达式求值) 栈的应用(表达式求值) OPTR OPND INPUT OPERATE 3*(7-2)# Push(opnd,’3’) # *(7-2)# 3 # Push(optr,’*’) #,* 3 (7-2)# Push(optr,’(’) #,*,( 3 7-2)# Push(opnd,’7’) #,*,( 3,7 -2)# Push(optr,’-’) #,*,(,- 3,7 2)# Push(opnd,’2’) #,*,(,- 3,7,2 )# Operate(7-2) #,*,( 3,5 )# Pop(optr) #,* 3,5 # Operate(3*5) # 15 # GetTop(opnd) 利用栈和递归解决的几个经典问题 【Hanoi塔问题】 【迷宫问题】 【八皇后问题】 【背包问题】 * * 堆栈 堆栈 堆栈的定义 堆栈的应用举例 堆栈的数组声明 堆栈的操作 两栈共享 堆栈的应用 栈:限定仅在表尾进行插入或删除操作的线 性表,表尾—栈顶,表头—栈底,不含元素的空表称 空栈 特点:先进后出(FILO)或后进先出(LIFO) an a1 a2 ……... 栈底 栈顶 ... 出栈 进栈 栈s=(a1,a2,……,an) 堆栈的定义 人生,就像一个栈的演变。出生时你赤条条来到人世,慢慢长大,渐渐变老,最终还要赤条条的离开世间。 人生,又仿佛是一天天小小的栈的重现。童年父母每天抱你不断进出家门,壮年你每天奔波于家和事业之间,老年你每天独自蹒跚于养老院的门前屋里。 人生,更需要有进栈出栈精神的体现。在哪里跌掉,就应该在哪里爬起。无论陷入何等困境,只要抬头能仰望蓝天,就有希望。不断进取,你就可以让出头之日重现。困难不会永远存在,强者才能勇往直前。 人生,其实就是一个队列的演变,0岁开始出场,10岁慢慢成长;20为情彷徨;30确定方向;40拼命打闯;50回头望望;60告老还乡;70搓搓麻将;80晒晒太阳; 90躺在床上;100挂在墙上。 人生,又是一个又一个小小的队列的重现。春夏秋冬轮回年年,早中晚夜循环天天。变更的是时间,不变的是你对未来执着的信念。 人生,更需要有队列精神的体现,南极到北极,不过是南纬90度到北纬90度的队列,如果你中途犹豫,临时转向,也许你就只能和企鹅永远相伴。可事实上,无论哪个方向,只要你坚持到底,你都可以到达终点。 递归过程 子程序的嵌套 堆栈的应用举例 递归过程 1 (n=0,1) n! = n(n-1)! (n1) 递归过程实现 计算5的阶乘(5!=5X4X3X2X1) { if ( n = = 1) return (1); else return ( n * f(n-1)); } f(1) f(2) f(3) f(4) f(5) top 1 f(1)=1 2*f(1) f(2)=2*f(1) 3*f(2) f(3)=3*f(2) 5*f(4) f(5)=5*f(4)
文档评论(0)