1 解题思路
构造包含顶指针,底指针和增量的结构体。然后分别构造一个只包含运算符的栈(OPTR)和只包含数字的栈(OPND)。之后依次读入所输入的表达式。判断是不是数字,如果是数字就将数字放入数字栈(OPND)。如果不是即运算符,让运算符栈栈顶元素和读入的运算符进行比较。如果优先级小于将读入的运算符入栈,优先级相等的就让栈顶元素出栈,优先级的大于的就让栈顶元素弹栈,并且连续两次让数字栈弹栈,得到一个运算符和两个数字,进行计算,得到的结果放入数字栈。循环以上过程直到读入的表达式字符为#为止。最后将数字栈出栈,即得到结果。
2 函数调用图

3 各函数功能
// 构造空栈char InitStack (SqStack *S);// 让e入栈char Push(SqStack *S, char e);// 让e出栈char Pop(SqStack *S, char *e);// 返回栈顶第一个元素char getTop(SqStack S);// 比较两个运算符的优先级,a,b中存放待比较的运算符,'>'表示a>b,'0'表示不可能出现的比较,这是通过二维数组建立比较表实现的char Precede(char a, char b);// 判断输入的某个字符是否是运算符int in(char c, char OP[8]);// 四则运算计算char Operate(char a, char n, char b);// 表达式计算,流程控制char evaluateExpression(SqStack OPTR, SqStack OPND);// 主函数,建立OPTR与OPND栈int main();
点击此处下载文档和源码
259

被折叠的 条评论
为什么被折叠?



