- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
出栈算法 算法步骤: step1 判别栈是否为空;若空,则输出 栈下溢信息,并停止执行;否则, 执行step2; step2 弹出(删除)栈顶元素; step3 栈顶指针top下移(减1)。 step4 返回出栈元素 T sq_StackT:: pop() { T y; if (top == 0) {cout “Stack-underflow\n”;return;} y=s[top-1]; top=top-1; return (y); } 课堂练习 参考P37 例2.10 建立容量为8的空栈,入栈1,2,3,4,5; 出栈两次并输出出栈的元素;最后输出栈中所有的元素。 表达式计算 计算表达式,首先要正确地定义运算规则: 为了让计算机能识别表达式,规定: 表达式由操作数(Operand)和操作符(Operator)和结束符 ;组成。 例如,3+2*7-5;=12 实际处理表达式是用两个栈结构OPTR(运算符)和OPND(操作数)加运算规则组成; 四则运算 先乘除、后加减 从左到右 先括号内,再括号外 计算表达式算法步骤 Step1 初始化,清空OPTR和OPND,将左定界符压OPTR栈; Step2 循环输入表达式中的每个字符 若输入操作数,则进OPND栈 若是操作符,则和OPTR栈顶元素比较,按规则进行相应操作 操作服从优先关系表(参考P38) Q1Q2 Q2入OPTR栈,再读入下一个元素 Q1=Q2 Q1出OPTR栈,从OPND中取两个数运算 Step3 直到出现右定界符为止。 举例,计算: 3+2*7-5 输入: 3+2*7-5 ; 1 ; 3 PUSH(OPND,3) 2 ; 3 + PUSH(OPTR,‘+’) 3 ;+ 3 2 PUSH(OPTD,‘2’) 4 ;+ 3,2 * PUSH(OPNR,*) 5 ;+* 3,2 7 PUSH(OPTD,‘7’) 6 ;+* 3,2,7 - Operate(2,‘*’,7) 7 ;+ 3, 14 - Operate(3,‘+’,14) 8 ; 17 - PUSH(OPNR,-) 9 ;- 17 5 PUSH(OPTD,‘5’) 10 ;- 17,5 ; Operate(17,‘-’,5) 11 12 ; RETURN(GETTOP(OPND)) 步骤 OPTR栈 OPND栈 输入字符 主要操作 课堂练习 参考P40 表达式 1+9*2/3-13 写出表达式每一个步骤的状态。 带括号的复杂些, 参考教材 P40 例2 N阶Hanoi塔问题 假设有A、B、C三座塔。在X塔上插有n个直径大小不同、以小到大编号为1、2、…、n的圆盘。现要求将A轴上的n个圆盘移至C塔上,并按同样顺序叠排。移动圆盘的规则为: 1)每次只能移动一个圆盘; 2)圆盘可以插在A、B、C的任意一个上; 3)任何时刻都不能将较大的圆盘压在较小的圆盘之上。 移动方法:先将(n-1)个圆盘从A移到B,将第n个圆盘从A移到C,再将(n-1)个圆盘从B移到C sq_Stackint stack(n); void f(int n, int a1, int b1, int c1) {if(n==1) /* there is only one element ,a1-c1 */ {
文档评论(0)