数据结构实验3:栈实现后缀表达式计算

在这里插入图片描述
**

*题目:使用栈实现后缀表达式计算 要求: 使用栈实现后缀表达式计算,其中,在后缀表达式中,输入的数字为整数,且为 正数,数字、符号之间用空格隔开,整个后缀表达式用“#”表示结束。 输入样例: 11 2 3 + # 输出样例: 55

**
思路及难点:
数字入栈,遇到符号立即计算
如遇到+,进行的运算是num1 + num2;
num2是栈顶元素
num1是栈顶下面的第一个数字
所以在保存num2后需要出栈一次,求得num2,然后将运算后的结果赋值给栈顶。

int num2 = nums.top();
			nums.pop();
			int num1 = nums.top();
			nums.top() = calculate(num1, num2, instream);
			break;

处理了很久的,char怎么转成double

cin.putback(instream);
			cin >> number;
			nums.push(number);

iostream是一个类,有自己的buffer。你每次cin>>a,它就把buffer减一,放到a中去。cin.putback(a)就是把a的内容放回buffer中。
再通过输入输出流进行自动的格式转换,很细节
在这里插入图片描述

/*题目:使用栈实现后缀表达式计算
要求:
使用栈实现后缀表达式计算,其中,在后缀表达式中,输入的数字为整数,且为
正数,数字、符号之间用空格隔开,整个后缀表达式用“#”表示结束。
输入样例:
1 22 3 + * #
输出样例:
55
*/
//顺序栈实现后缀表达式计算
//author:zlb
//data:3.16
#include <iostream>
#include <stack>
using namespace std; 

double calculate(double num1, double num2, char c) {
	switch (c)
	{
	case'+':
		return num1 + num2;
	case'-':
		return num1 - num2;
	case'*':
		return num1 * num2;
	case'/':
		return num1 / num2;
	}
}

int main() {
	char instream;
	double number;
	stack<double>nums;
	while (cin >> instream)
	{
		if (instream == '#')
		{
			break;
		}
		switch (instream)
		{
		case '*':
		case '/':
		case '+':
		case '-': {

			int num2 = nums.top();
			nums.pop();
			int num1 = nums.top();
			nums.top() = calculate(num1, num2, instream);
			break;
		}
		default:
			cin.putback(instream);
			cin >> number;
			nums.push(number);
		}
	}
	cout << nums.top();
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值