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

数据结构实验3:栈实现后缀表达式计算_第1张图片
**

*题目:使用栈实现后缀表达式计算 要求: 使用栈实现后缀表达式计算,其中,在后缀表达式中,输入的数字为整数,且为 正数,数字、符号之间用空格隔开,整个后缀表达式用“#”表示结束。 输入样例: 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中。
再通过输入输出流进行自动的格式转换,很细节
数据结构实验3:栈实现后缀表达式计算_第2张图片

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

你可能感兴趣的:(#,数据结构实验,栈)