当前位置:主页 > 365bet手机客户端下载 >

第3章链栈和应用程序.ppt

第3章堆栈和堆栈应用程序3表达式要正确解释表达式,请将执行机器的表达式转换为正确的指令。
运算符的第一种方法是根据四个算术规则编译或解释表达式。
表达式由操作数,运算符和限制组成。
操作数可以是变量或常量,这里考虑的运算符只是+ - * /,限制有左括号和右括号以及结束符号“#”。
两个工作站可用于实现操作员优先级。
OPTR:存储操作员,OPND:存储操作或操作结果
算法的基本思想:(1)确保操作数堆栈为空,表达式以运算符堆栈堆栈底部的字母“#”开头。
(2)如果操作数在OPND堆栈上,则读取表达式中的每个字符,如果是操作符,则将优先级与OPTR堆栈的顶部运算符进行比较,然后计算表达式跟着他们直到你complete(即OPTR堆栈的第一个元素和当前正在读取的字符是“#”)。
Algorithm OperandTypeEvaluateExpression(){//运算符的第一个算法,用于计算算术表达式,分别将OPTR和OPND设置为运算符堆栈和操作数堆栈。OP是运营商(运营商和限制)。InitStack(OPTR;)Push(OPTR,'#'); InitStack(OPND)。c = getchar();而(c!
='#'| | GetTop(OPTR)
='#'){If(!
在(c,OP)){Push((OPND,c); c = getchar();}//堆栈的第11个开关的操作数(Precede(GetTop(OPTR),c){case'':// stackThe low element precedence is low,push operator stack(OPTR,c); c = getchar(); break; case'='/删除括号并接收下一个字符左右括号一个或两个“#”Pop(OPTR,x); c = getchar(); break;'':顶部的顶部元素具有高优先级且操作符未堆叠,操作数不堆叠,因此弹出堆栈(OPTR,theta); pop(OPND,b); pop(OPND,a); push(OPND,操作(a,theta,b)); break;switch}// whilereturnGetTop(OPND);}// EvaluateExpression3。
堆栈和递归的三个示例:Fibonacci数字是0,1,1,2,3 ......,即fib(0)= 0。fib(1)= 1; fib(n)= fib(n-1)+ fib(n-2)(在n1的情况下)。
递归函数编写如下。intfib(intn){if(n == 0)返回0; if(n == 1)返回1;执行递归执行递归和回归的两个步骤。if(n1)返回fib(n-1)+ fib(n-2);}
在递归阶段,更复杂问题(大小为n)的解决方案被转移到比原始问题(小于n)更简单的解决方案。
例如,解决fib(n)并按压以解决fib(n-1)和fib(n-2)。
为了计算fib(n-1)和fib(n-2),首先计算fib(n-3)和fib(n-4)。
类似地,立即获得结果1和0,直到计算出fib(1)和fib(0)。
在递归阶段,应该存在递归结束的情况。
例如,当函数fib中n为1且为0时。
在回归阶段,在获得最简单案例的解决方案后,我们找到了解决更复杂问题的方法。例如,获取fib(1)和fib(0)并获得结果。当获得fib(2),...,fib(n-1)和fib(n-2)的结果时,返回fib(n)的结果。
通常,在函数调用另一个函数之前,必须执行以下操作:a)传递实际参数,返回地址等要调用保存的函数。b)将存储区域分配给被调用函数的局部变量。c)将controlIr传送到被调用函数的输入。
在返回被调用函数的调用函数之前,有三件事要做。a)保存被调用函数的结果。b)释放被调用的函数

点击次数:  更新时间2019-05-16  【打印此页】  【关闭