表达式求值的栈操作写法,还真是老生常谈的经典。但这个 C 语言版的实现思路,蛮实用的,适合想搞清楚运算符优先级和中缀转后缀表达式逻辑的你。

双栈结构的思路挺直观:一个栈放操作数(叫opnd),另一个栈放操作符(叫optr)。左右括号的也都考虑到了,优先级判断也靠compare()函数搞定了,整体逻辑清晰。

顺序栈的定义方式也比较经典,结构体里配了stacksizetopbase这仨成员,栈的初始化、判空、入栈、出栈全都有现成函数。代码结构清爽,学起来压力不大。

3.5 + 4.2 * (1 - 2)这种含小数点的表达式也完全没问题,用的是double做数据类型,不用担心精度的问题。Operate()里把加减乘除这些基础操作都封装好了,直接用。

而且主函数EvalExpres()写得也挺巧,每一步扫描都根据字符类型走不同分支,该入栈就入栈,该出栈就出栈,逻辑没绕太多弯子,新手看了也容易跟上思路。

如果你最近在学表达式求值算法,又不想一上来就看 C++或者 Python 那种封装过度的版本,这份 C 语言代码还挺适合练练手的。尤其是对栈结构理解还没打牢的同学,边调试边看效果,快就通透了。