用栈解决四则运算问题

本文介绍了如何利用栈的数据结构解决四则运算问题,包括中缀表达式转后缀表达式以及计算后缀表达式的结果。重点在于实现`infix_to_suffix()`和`suffix_to_result()`两个函数,考虑了负数、括号和不同优先级运算符的处理。测试数据涵盖了个位和十位以上的正负数,以及嵌套括号的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章的解决方法参考了《大话数据结构》中关于栈的应用介绍

值得注意的是,书中关于中缀表达式转后缀的讲解中不尽清楚。本人也在这里花了点时间进行推敲错误的原因,也在网上搜到了这篇文章,比较好地介绍了中缀转后缀的的规则

原理:

用计算机求解四则运算,可以使用。因为“先进后出”的特性正好满足了能通过后缀表达式去计算出四则运算式子的结果。而后缀表达式的转化也能使用对中缀表达式进行操作从而转化。明显地,由中缀表达式-》后缀表达式, 后缀表达式-》式子结果。 都需要使用到。所以编码实现中,我们着重的是实现这两个过程的函数(infix_to_suffix()、suffix_to_result()

注意:

测试数据

  • 每个数可以是只达个位的数,也可以达十位以上的数
  • 可以是负数或正数(负数需在两边添加括号)
  • 括号内能存在多个括号,例:( ( 2 + 3 ) + ( 4 + 5 ) + ( ( 6 + 7 ) + 8 ) )

实现

  • 定义了一个全局table用来存储各个运算符的优先级。 + - 等优先级,* / 等优先级, ()不存在优先级(这里主要为了代码实现而取消其优先级)
  • 设置了一个 priority 变量进行存储栈顶元素的优先级,这在中缀转后缀的时候被使用到,并在每次的压栈出栈后,都须对新的栈顶元素进行记录其优先级
  • 在中缀转后缀的函数中,主要包含这几部分:1. 遇到数字直接输出,然后continue  2.左括号直接压栈,然后continue 3. 右括号则将将栈中在左括号以上的所有运算符弹出&
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值