c++逆波兰式(中缀表达式转化为后缀表达式)

本文介绍了如何使用C++将中缀表达式转换为后缀表达式,即逆波兰表达式。核心算法涉及栈数据结构和运算符优先级判断,遵循括号优先和运算符优先级规则。通过测试,成功实现了表达式的转换。
摘要由CSDN通过智能技术生成

前言:
一般算术表达(中缀表达),如#3*(4+2)/2-5#,#为表达式界定符,逆波兰
表达式(后缀表达式),如前述表达的后缀表达式为:3 4 2 + * 2 / 5 -。设中缀表达式的运算符有+、-、、/、#五种,运算符的优先级别从高到低为()、、/、+、-、#
注意:
有括号先算括号内,再算括号外的,多层括号由内向外进行

核心算法伪代码:
1.将两个栈初始化为#;
2.从左至右依次扫描表达式的每个字符,执行下述操作
2.1 若当前字符是运算对象,则输出该字符,处理下一个字符;
2.2 若当前字符是运算符且优先级别比栈 的栈顶运算符的优先级
高,则将该字符入栈 ,处理下一个字符;
2.3 若当前字符是运算符且优先级别比栈的栈顶运算符优先级别
低,则将栈的栈顶元素输出,当前字符入栈,处理下一个字符;
2.4 若当前字符是运算符且优先级别与栈的栈顶运算符的优先级相
等,则将栈的栈顶元素输出,当前字符入栈,处理下一个字符。

#include<iostream>
#include<stack>//使用标准库的栈所需头文件 
using namespace std;
stack<char> s1;//运算符栈
stack<char> s2;//中间值栈
int youxianji(char x)//返回运算符号优先级 
{
   
	int y;
	switch(x){
   
		case '*':y=2;break;
		case '/':y=2;break;
		case '+':y=1;break;
		case '-':y=1;break;
		case '#':y=0;break;
	}
	
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值