1 / 24
文档名称:

堆栈队列2.ppt

格式:ppt   页数:24
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

堆栈队列2.ppt

上传人:875845154 2016/5/6 文件大小:0 KB

下载得到文件列表

堆栈队列2.ppt

相关文档

文档介绍

文档介绍:栈的应用举例 表达式求值 b算符优先法: b 4+2 * 3-10/5 = 4+6-10/5 = 10-10/5 =10-2 = 8 b操作数( operand): 进 OPND 栈 b操作符( operator): 进 OPTR 栈 b界限符( delimiter): 算符间的优先关系: bθ 1 θ 2+-*/()# b + >><<<>> b - > ><<<>> b*>>>><>> b />>>><>> b (<<<<<≒ b )>>>>>> b # < <<<<= Precede: 判定运算符栈的栈顶运算符θ 1与读入的运算符θ 2之间的优先关系的函数. Operate: 进行二元运算 (算法 ) OperandType EvaluateExpression () b{ InitStack (OPTR); Push(OPTR, ‘#’); b InitStack (OPND); c = getchar (); b While (c!= ’#’|| GetTop (OPTR)!= ’#’){ b If( !In(c,OP)){ Push(OPND,c); c = getchar () ;} // 不是运算符则进栈 b else b switch (Precede( GetTop (OPTR),c)){ b case ‘<’: // 栈顶元素优先权低 b Push(OPTR,c); c = getchar () ; break ; b case ‘≒’: // 脱括号并接受下一个字符 b Pop(OPTR,x); c = getchar () ; break ; b case ‘>’: // 退栈并将运算结果入栈 b Pop(OPTR,theta); Pop(OPND,b); Pop(OPND,a); b Push(OPND,Operate(a,theta,b)); break ; b default: printf (“ Expression error! ”); return(ERROR); b } // switch b } // while b return GetTop (OPND); b } // EvaluateExpression 对算术表达式 3* (7-2) 求值. b步骤 OPTR 栈 OPND 栈输入字符主要操作 b1 # 3 * ( 7 - 2 ) # Push(OPND, ’3’) b2 # 3 * ( 7 - 2 ) # Push(OPTR, ’*’) b3 # * 3 ( 7 - 2 ) # Push(OPTR, ’(’) b4 # * ( 3 7 - 2 ) # Push(OPND, ’7’) b5 # * ( 3 7 - 2 ) # Push(OPTR, ’-’) b6 # * ( - 3 7 2 ) # Push(OPND, ’2’) b7 # * ( - 3 7 2 ) # Operate( ‘7’,’-‘,’2’) b8 # * ( 3 5 ) # POP(OPTR) b9 # * 3 5 # Operate( ‘3’,’*’,’5’) b10 # 15 # Return( GetTop (OPND)) 例:汉诺塔问题: 将a柱子上的盘移到 c柱,用 b柱放临时盘要求:一次只能移动一个盘,大盘不可放于小盘上。 abc hanoi hanoi 塔问题塔问题 b定义函数: movetower (n,a,c,b) n 个盘 a->c,b放临时盘 b分三步: bmovetower (n-1,a,b,c) 将n