利用栈和队列进行表达式求值

该博客介绍了如何利用栈和队列的特性解决表达式求值的问题。实验目标是深入理解和应用栈与队列,重点在于设计算术表达式的求解算法,遵循特定的算符优先级。实验步骤包括设置运算符和运算数栈,识别和转换运算符与运算数,以及程序调试。测试数据展示了不同输入表达式的正确结果。
摘要由CSDN通过智能技术生成

利用栈和队列进行表达式求值

一、实验目的

深入了解栈和队列的特性,学会在实际问题下灵活运用它们。

二、问题描述

表达式求值运算是实现程序设计语言的基本问题之一,也是栈应用的一个典型例子。设计并演示用算符优先级对算术表达式的求解过程。

三、实验要求

1、算法优先级别如下:
在这里插入图片描述
2、以字符序列的形式从终端输入语法正确、不含变量的算术表达式,利用给出的算符优先级关系,实现对算术四则混合运算的求解过程。

四、实验环境

PC微机
DOS操作系统或 Windows 操作系统
Turbo C 程序集成环境或 Visual C++ 程序集成环境

五、实验步骤

1、根据给出的算符优先级,设置运算符栈和运算数栈;
2、在读入表达式的同时,完成运算符和运算数的识别处理,并将运算数的字符序列形式转换成整数形式,并进行相应的运算;
3、调试程序,检查输出结果;
4、实验小结。

六、测试数据

1.输入数据:1+(20+4)/(4-1)
正确结果:9
2.输入数据:2*9-6-(20+4)/(4-1)
正确结果:4

七、实验报告要求

1、问题描述;
2、算法的设计描述;
3、测试结果的分析与讨论;
4、实现算法的程序清单,应有足够的注释。

八、程序代码

#include <iostream>
using namespace std;
#include <stack>
typedef bool status;
constexpr auto ok = 1;
constexpr auto error = 0;
stack<double>OperandsOriginal;
stack<char> OperatorOriginal;
stack<double>Operands;
stack<char> Operator;
void Calculation();
char number(char a) {
   
	double opead = 0;
	opead = (opead + int(a) - 48) * 10;
	while (1) {
   
		cin >> a;
		if (a < 48 || a > 58) {
   
			opead /= 10;
			OperandsOriginal.push(opead);
			return a;
		}
		opead = (opead + int(a) - 48) * 10;
	}
}
status Expression_input() {
   
	char a;
	while (1) {
   
		cin >> a;
		if (a > 47 && a < 58)
			a = number(a);
		if (a == '=') {
   
			return ok;
		}
		else if (a == '+' || a == '-' || a == '*' || a == '/' || a == '(' || a == ')') {
   
			OperatorOriginal.push(a);
			return 0;
		}
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值