利用栈计算后缀表达式

上篇笔记我们已经知道了后缀表达式以及他的计算方法,本篇我会用代码实现利用栈计算后缀表达式。

计算步骤

  1. 初始化一个空栈。此栈用来对要运算的数字进出使用
  2. 如果遇到符号就把栈上的两个元素拿出来计算然后再压栈
  3. 遇到数字就压栈,遇到符号就出栈两个数字然后计算
  4. 直到表达式结束

代码实现

#include<stdio.h>
#include<stack>
using namespace std;
int PerformOperation(char c, int a, int b);
int Isnumber(char c);
bool IsOperator(char c);
int main()
{
	stack<char> S;
	char expression[50] = "562*+4-9+";
	int n = strlen(expression);
	int op1 = 0;
	int op2 = 0;
	for (size_t i = 0; i < n; i++)
	{
		if (IsOperator(expression[i]))
		{
			op1 = S.top();
			S.pop();
			op2 = S.top();
			S.pop();
		int res = PerformOperation(expression[i], op2, op1);
		S.push(res);
		}
		else if (Isnumber(expression[i]))
		{
			int operand = 0;
			operand = (operand * 10) + (expression[i] - '0');
			S.push(operand);
		}
	
	}
	int result = S.top();
	printf("result = %d", result); 
}
int PerformOperation(char c,int a,int b)
{
	if (c == '+')
	{
		return a + b;
	}
	else if (c == '-')
	{
		return a - b;
	}
	else if (c == '*')
	{
		return a * b;
	}
	else if (c == '/')
	{
		return a / b;
	}
}
int Isnumber(char c)
{
	if (c>='0'||c<='9')
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
bool IsOperator(char c)
{
	if (c == '+' || c == '-' || c == '*' || c == '/')
	{
		return true;
	}
	return false;
}
C++

PerformOperation函数是通过传入的操作符来计算栈上元素的
Isnumber判断参数是否是数字
IsOperator判断是否是操作符

整体逻辑

根据字符串从左面开始扫面(我这里用的是for循环你也可以用其他的循环)
如果是操作符,则pop栈顶两个元素进行运算,并将运算的结果压入栈。
如果是数字,则把字符转成整数(因为后续要参加计算)并入栈,经过反复计算压栈,最后留在栈顶的就是我们要的结果。
eg:计算931-2*+52/+

利用栈计算后缀表达式

C语言

前缀中缀后缀表达式

2024-11-14 18:28:36

C语言

利用栈转换中缀表达式到后缀表达式

2024-11-14 18:34:48

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索

Powered by atecplugins.com