文档介绍
* 问:为什么要设计堆栈?它有什么独特用途? 简化了程序设计的问题; 递归运算的有力工具; 用于保护现场和恢复现场; 调用函数或子程序非它莫属 。 答: 第三章 栈和队列 * 括号匹配的检验 ———— P49 设计思路:用栈暂存左括号 例3:行编辑程序 ————P49 设计思路:用栈存放输入的字符 例4:表达式求值 —————P52 设计思路:用栈暂存运算符 例5:汉诺仪(Hanoi)塔-——P55 设计思路:用栈实现递归调用 例2: 3.2 栈的应用举例 数制转换(十转N) ——P48 设计思路:用栈暂存低位值 例1: * 3.2 栈的应用举例 例1 数制转换 对于输入的任意一个非负十进制数,显示输出与其等值的八进制数 数制转换方法 N = (Ndiv8)10? 8+N mod 8 N:十进制数,div:整除运算,mod:求余运算;? (1348)10 = 2?83+5?82+0?8+4 = (2504)8 N 1348 168 21 2 N div 8 168 21 2 0 N mod 8 4 0 5 2 计算时从低位到高位 顺序产生八进制数的各个数位 结果: 2 5 0 4 显示时按从高位到低位的 顺序输出 * 3.2 栈的应用举例 void conversion( ) { InitStack(s); //建空栈 scanf(“%d”,&x); //输入一个非负十进制整数 while(x!=0) { // x不等于零循环 push(s, x% 8); // x/8第一个余数进栈 x=x/8; //整除运算 } while(! StackEmpty(s) ) //输出存放在栈中的八制数位 { x=pop(s); printf(“%d”,x); }} 算法3.1 * 例2:括号匹配的检验 行编辑程序 功能:用户,终端程序或数据 数据区 直接存入? 设置:用户缓冲