利用栈对四则运算简单表达式求解的测试(中缀表达式)

这段代码展示了如何利用栈来解析和计算简单的中缀表达式。程序通过两个栈,一个用于存储操作符,另一个存储操作数,遵循优先级规则进行计算。在扫描表达式时,遇到操作符会根据其优先级与栈顶操作符比较,决定是否进行计算。最后,栈顶的元素即为表达式的计算结果。
摘要由CSDN通过智能技术生成
/*
 *  利用栈计算简单中缀表达式的值
 *  简单原理:
    1. 扫描整个表达式, 用两个栈, 一个存放操作符, 一个存放操作数, 注意力集中到
       操作符上.
    2. 当发现操作符栈栈顶的元素的优先级比扫描到的操作符的优先级高时, 该操作符出栈,
       从操作数栈里退栈两元素来计算结果再放回操作数栈中, 重复该步骤, 直到发现栈中
       没有操作符的优先级比当前扫描的操作符高, 该扫描操作符进栈, 进入步骤3. 否则
       直接将当前扫描的操作符进栈.
    3. 扫描结束时, 操作数栈的栈顶元素即为表达式的计算结果

    假设: 输入的中缀运算表示式是合法的, 只有加减乘除和小括号包含。
 */
#include <stack>
#include <stdio.h>
#include <stdlib.h>

const int MAX_OPERATOR_NUM = 6; /* +, -, *, /, (, ) */

static int ex_switch(char c);
static bool is_operator(char c);
static int do_caculate(int oprand1, int oprand2, char operator_ch);

/******************************************************************************/
//运算优先级, 先乘除, 后加减, 先括号内, 再括号外, 从左至右依次计算
//运算符数组每行对应的相关列的优先级符号为操作符栈顶元素与扫描到的操作符
//比较的可能结果
const char operator_priority[][MAX_OPERATOR_NUM] =
{
           // +     // -     // *     // /    // (     // )
/* + */    {'>',     '>',     '<',   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值