/*
* 利用栈计算简单中缀表达式的值
* 简单原理:
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] =
{
// + // - // * // / // ( // )
/* + */ {'>', '>', '<',
利用栈对四则运算简单表达式求解的测试(中缀表达式)
最新推荐文章于 2022-05-08 21:43:26 发布
这段代码展示了如何利用栈来解析和计算简单的中缀表达式。程序通过两个栈,一个用于存储操作符,另一个存储操作数,遵循优先级规则进行计算。在扫描表达式时,遇到操作符会根据其优先级与栈顶操作符比较,决定是否进行计算。最后,栈顶的元素即为表达式的计算结果。
摘要由CSDN通过智能技术生成