链表栈中的一个小BUG,希望高手
只要把
while(priority(exp[pos]) data)&& !empty(operand))
改成
while (!empty(operator)&&priority(exp[pos]) data))
就可以了
我已经编译测试一遍可以。
原来的代码问题在于当操作符栈operator为空时operator->data是没有意义的,程序在此时会报错,把!empty(operator)放在前面就可以避免这种情况,当operator==NULL时,!empty(operator)==FAULS,程序不会再执行priority(exp[pos]) data)判断其真假,而是直接跳过...全部
只要把
while(priority(exp[pos]) data)&& !empty(operand))
改成
while (!empty(operator)&&priority(exp[pos]) data))
就可以了
我已经编译测试一遍可以。
原来的代码问题在于当操作符栈operator为空时operator->data是没有意义的,程序在此时会报错,把!empty(operator)放在前面就可以避免这种情况,当operator==NULL时,!empty(operator)==FAULS,程序不会再执行priority(exp[pos]) data)判断其真假,而是直接跳过WHILE循环。
附上我修改过的源码。收起