1、1 例1 数制转换 见教材P48设计思路 用栈暂存低位值例2 括号匹配的检验 见教材P49设计思路 用栈暂存左括号例3 表达式求值 见教材P52设计思路 用栈暂存运算符例4 汉诺 Hanoi 塔 见教材P55设计思路 用栈实现递归调用 栈的应用举例 2 例如 1348 10 2504 8 其运算过程如下 NN 8N 8 13481684 168210 2125 202 计算顺序 输出顺序 算法基于原理 N Ndivd d Nmodd 例1 数制转换 见教材P48 设计思路 用栈暂存低位值 3 voidconversion InitStack S scanf d conversion 4 算法的
2、设计思想 1 凡出现左括弧 则进栈 2 凡出现右括弧 首先检查栈是否空若栈空 则表明该 右括弧 多余 报错 否则和栈顶元素比较 若相匹配 则 左括弧出栈 否则 报错 3 表达式检验结束时 若栈空 则表明表达式中匹配正确 否则表明 左括弧 有余 报错 例2 括号匹配的检验 见教材P49 设计思路 用栈暂存左括号 此例作为上机实验题 5 每个运算符的运算次序要由它之后的一个运算符来定 在后缀式中 优先数高的运算符领先于优先数低的运算符 分析 原表达式 和 后缀式 中的运算符 原表达式 a b c d e 后缀式 abcd e 例3 表达式求值 见教材P52 如何从原表达式求得后缀式 后缀式的运算规
3、则是 运算符在式中出现的顺序恰为表达式的运算顺序 每个运算符与在它之前出现且仅靠它的两个操作数构成一个表达式 6 4 若当前运算符的优先数高于栈顶运算符 则进栈 5 否则 退出栈顶运算符发送给后缀式 6 对它之前后的运算符起隔离作用 可视为自相应左括弧开始的表达式的结束符 1 设立暂存运算符的栈 从原表达式求得后缀式的规律为 3 若当前字符是操作数 则直接发送给后缀式 设表达式的结束符为 预设运算符栈的栈底为 7 a b c d e a b c d e 已知表达式 后缀式 教材P53中表3 1给出了算符之间的优先级 专为计算机处理而设计的表 8 例4 汉诺 Hanoi 塔传说在创世纪时 在一个
4、叫Brahma的寺庙里 有三个柱子 其中一柱上有64个盘子从小到大依次叠放 僧侣的工作是将这64个盘子从一根柱子移到另一个柱子上 分析 设三根柱子分别为x y z 盘子在x柱上 要移到z柱上 1 当n 1时 盘子直接从x柱移到z柱上 2 当n 1时 则 设法将前n 1个盘子从x移到y柱上 借助z 则盘子n就能从x移到z柱上 再设法把n 1个盘子从y移到z柱上 这又是一个与原来相同的问题 只是规模少 了 n n 1 移动时的规则 每次只能移动一个盘子 只能小盘子在大盘子上面 可以使用任一柱子 9 递归运算 VoidHanoi intn charx chary charz 将n个编号从上到下为1 n的盘子从x柱 借助y柱移到z柱if n 1 move x 1 z 将编号为1的盘子从x柱移到z柱else 将n 1个编号从上到下为1 n 1的盘子从x柱 借助y柱移到z柱Hanoi n 1 x z y move x n z 将编号为n的盘子从x柱移到z柱 将n 1个编号从上到下为1 n 1的盘子从y柱 借助x柱移到z柱Hanoi n 1 y x z Hanoi 程序设计如下