哈工大数据结构实验:中缀转后缀表达式求值

需积分: 10 16 下载量 153 浏览量 更新于2024-09-11 4 收藏 62KB DOC 举报
"哈尔滨工业大学计算机科学与技术学院的数据结构与算法实验,首次实验主题为‘线性表及其应用’,具体任务是实现算符优先法对中缀表达式求值的过程,包括将其转换为后缀表达式并进行计算。实验涉及栈结构的使用,以及设计特定的函数来处理运算符的优先级和计算。实验提供了测试案例,例如1*(2.5+8.9)-1/2的处理过程。" 在本次哈工大的数据结构第一次实验中,主要关注的是中缀表达式到后缀表达式的转换以及后缀表达式的求值。这一过程涉及到计算机科学中的一个重要概念——数据结构,特别是栈的运用。栈是一种具有“后进先出”(LIFO)特性的数据结构,非常适合处理需要顺序处理的运算符和操作数的问题。 实验的目标是通过线性表来演示算符优先法对中缀表达式的求值过程。首先,用户需要从键盘输入一个语法正确的中缀表达式。然后,程序会利用栈结构将这个中缀表达式转换为后缀表达式,即所谓的逆波兰表示法。在这个转换过程中,遇到操作数时直接存入后缀表达式栈,遇到运算符则根据其优先级与栈顶运算符的关系决定是压栈还是进行运算。对于括号,开括号压栈,闭括号则触发栈中运算符的出栈,直到遇到相应的开括号为止。 实验的计算部分主要由以下几个步骤组成: 1. 遍历输入的表达式,遇到操作数时存储,遇到运算符时进行计算。 2. 使用自定义函数`ji(char c)`来比较两个运算符的优先级。 3. 函数`Cal(double num_1, double num_2, char op)`负责执行实际的计算,接收两个操作数和一个运算符作为参数,返回计算结果。 4. 函数`hou(char ch[])`用于构建并处理后缀表达式,实现从后缀表达式到计算结果的转换。 测试结果显示了中缀表达式1*(2.5+8.9)-1/2转换和计算的过程。实验通过这种方式让学生深入理解栈数据结构的应用,以及如何使用算符优先法解决表达式求值问题,这在编译原理、算法设计和计算理论等领域都有重要应用。