中缀表达式的计算 c语言链表实现

中缀表达式的计算 c语言链表实现

1题目
输入一个中缀算术表达式,计算其结果。对输入的表达式,做如下假设:
(1)只考虑+、-、*、/这四种运算符,中缀表达式中只有一种括号();
(2)输入的中缀表达式中数字只有整数,没有小数;
(3)假定输入表达式是合法的。
2测试用例
中缀表达式:(1)1+(2-3)*4+4/2 (2)a+(b-c)*d
3算法
建立两个栈,分别储存数字和运算符,在读取表达式的时候,凡是遇到数字,就将其压栈,压入stack1,当遇到运算符的时候进行判断,若栈为空,进行压栈,若运算符为左括号,也进行压栈,为右括号,则进行计算,计算至左括号处,若为一般的运算符,则与前一个运算符的优先级进行比较,若前一个的优先级高或者相等,则先进行运算,反之,则将该运算符压栈。最后输出数字栈中的数字,即为运算结果。
4 算法过程的模拟
例 1+(2-3)*4+4/2

stack1 stack2

读取表达式,读取为1,将其存入stack1

stack1 stack2
1

读取第二个,为运算符,此时stack2为空,则直接压栈

stack1 stack2
1 +

读取第三个,为左括号,进行压栈

stack1 stack2
1 +
(

读取第四个,为数字,对stack1进行压栈

stack1 stack2
1 +
2 (

读取第五个,为运算符,与前一个进行运算级的比较,大于左括号,则进行压栈

stack1 stack2
1 +
2 (
-

读取第六个,为数字,对stack1进行压栈

stack1 stack2
1 +
2 (
3 -

读取第七个,为右括号,则进行运算,运算至左括号处,左括号输出,则有

stack1 stack2
1 +
-1

读取第八个,为乘号,比较运算优先级,应进行压栈

stack1 stack2
1 +
-1 *

读取第九个,为数字,对stack1进行压栈

stack1 stack2
1 +
-1 *
4

读取第十个,为运算符,比较优先级,发现应进行运算,则有Stack1: stack2:

stack1 stack2
1 +
-4

继续读取第十个,与前一个优先级进行比较,应进行运算

stack1 stack2
-3

继续读取第十个,此时stack2为空,则进行压栈

stack1 stack2
-3 +

读取下一个,为数字,对stack1压栈,有

stack1 stack2
-3 +
4

读取下一个,为运算符,比较应压栈,有

stack1 stack2
-3 +
4 /

读取下一个,为数字,压栈

stack1 stack2
-3 +
4 /
2

读取下一个,读取发现多项式结束,则进行运算至结束

stack1 stack2
-1

输出运算结果,为-1。
代码如下:

#include <stdio.h>
#include <stdlib.h>
static int stack1[100];
static char stack2[100];
static char str
  • 13
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值