[源码和文档分享]表达式求解

1 解题思路

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

2 函数调用图

6607861-bf2b7b69654e6d7f.png

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();

参考文档和完整的文档和源码下载地址:

https://www.write-bug.com/article/1688.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值