算法3-4 表达式求值

/*题目描述
算数四则运算的规则是1)先乘除,后加减;2)从左算到右;3)先括号内,后括号外。 由此,算式4+2*3-10/5的计算顺序为4+2*3-10/5=4+6-10/5=4+6-2=8。 给定

一个以“#”作为结束符的算式,求出算式的结果。 
输入
以“#”结尾的表达式,运算数为正整数。每个表达式占一行。

输出
输出表达式运算的结果。

样例输入
4+2*3-10/5#
3*(7-2)#
2*3/2#
样例输出
8
15
3
*/


#include <stdio.h>
#include <iostream>
#include <stack>
#include <cstring>
#include <stdlib.h>

using namespace std;

#define OP_SIZE 7
#define MAX_SIZE 1000
#define TRUE 1
#define FALSE 0
#define ERROR -1

char OP[]={'+','-','*','/','(',')','#'};
char PRIOR[OP_SIZE][OP_SIZE] =
{ // 运算符优先级表
	'>','>','<','<','<','>','>',
	'>','>','<','<','<','>','>',
	'>','>','
算法5.12-5.13通常是指用于表达式求值算法。这类算法在编译原理和编程语言解释器中非常重要。以下是对这类算法的介绍: 1. 中缀表达式转后缀表达式算法5.12): 这个过程通常使用来实现。算法的基本步骤如下: - 创建一个空用于存储运算符 - 创建一个空列表用于存储输出 - 遍历中缀表达式的每个符号: * 如果是操作数,直接添加到输出列表 * 如果是左括号,压入中 * 如果是右括号,弹出中元素并添加到输出,直到遇到左括号 * 如果是运算符,当顶运算符的优先级大于或等于当前运算符时,弹出顶运算符并添加到输出,然后将当前运算符压入- 遍历结束后,将中剩余的运算符全部弹出并添加到输出 2. 后缀表达式求值算法5.13): 这个过程也使用来实现。算法的基本步骤如下: - 创建一个空用于存储操作数 - 遍历后缀表达式的每个符号: * 如果是操作数,将其转换为数值并压入中 * 如果是运算符,从中弹出两个操作数,应用运算符后将结果压回- 遍历结束后,中剩下的元素就是表达式的最终结果 这些算法的主要优点包括: - 简单高效:使用结构可以有效地处理运算符的优先级 - 易于实现:算法步骤清晰,易于用各种编程语言实现 - 通用性强:可以处理任意复杂的算术表达式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值