设计和调试分析
1. 在建立二叉树时,要遵循一个原则,那就是运算符做为分支结点,操作数做为叶子结点,利用栈进行操作。当遇到操作数是,无论是变量还是实数或整数,都将入栈。当遇到运算符号时,把栈顶的两个元素弹出来进行运算,然后再把运算结果放入栈中。如果你输入的是正确的后缀表达式,那么,最终要建立的那棵树就是栈中唯一的一个元素。与此同时,也可以用这个结果来作为判断用户输入的表达式是否为正确的后缀表达式,当最后的栈中出现多于一棵二叉树时,说明此表达式不是正确的后缀表达式。
2. 二叉树的结点类型分为四类,INT为整型,DOU为实型,CHAR为字符型 ,OPER为操作符,其含义见名知意,为实际情况所需要。
3. 此系统运用到C标准函数库里的其他函数,比如将字符串转化为浮点数 atof(a) 出自 #include,等等。
4. 以树的结构打印二叉树的信息。
思想:确定每个树的(x,y)坐标,x坐标是节点中序遍历的顺序,y坐标是 节点的高度,但目前此方法行不通,因为问题很复杂,其中一个原因是结点 的类型不是单一的,有实型,有整型,有字符型。这里运用的方法是层次遍 历二叉树,把遍历结果放在另外一个队列中,然后再利用此队列进行打印。
但只打印深度为4以下的树,此方法有待提升。
5. 计算表达式的结果时,后序遍历,利用栈对表达式进行运算,最后结果以结点 的形式存放在栈中,再在main 中把其取出打印。其思想是,后序遍历,遇 操作符,则进行运算,运算结果作为一个新结点入栈(结果统一为double)
一、 用户手册
1. 本程序的运行环境为基于Win 7操作系统下的VC++6.0,可执行文件为:Expression.exe;
2. 用户双击即可启动程序;
3. 进行演示程序,显示如下主菜单界面:
4. 现在输入一个错误的后缀表达式演示。(其他情况用户自行操作)请用户认真阅读出现的友好提示。
5. 现在输入一个正确的后缀表达式来进行演示。
6. 现在对变量进行赋值,并计算
7. 其他功能与BUG请用户大胆进行测试,最坏的情况只不过是程序不能运行,并没有什么大的危害。
二、 测试结果
【测试数据】
1)分别输入0;a; -91; 2 4 + 33 * -8 -; 1.5 a uuu / *;
2 11 + 3 ^ 并输出。
2)每当输入一个表达式后,对其中的变量赋值,然后对表达式求值。
3)还有很多测试的数据,详细请读者自行测试。
1. 输入0
2. 输入 a
3. 输入-91
4. 输入-5 8 +
5. 输入2 4 + 33 * -8 -
6. 输入1.5 a uuu / *
7. 输入 2 11 + 3 ^
8. 输入a1 3h * (字母开头的变量取最后一个字符,若最后一个字符为数字,即当成数字使用。数字开头的变量取字母前面的数字,当成数字使用)
广工 数据结构 表达式类型求值(下),布布扣,bubuko.com