用栈实现中缀表达式转后缀表达式(0-9数值运算示例)

目录

 

一、方法

二、代码

三、运行例子


一、方法

中缀表达式转后缀表达式的方法:
1.遇到操作数:直接输出(添加到后缀表达式中)
2.栈为空时,遇到运算符,直接入栈
3.遇到左括号:将其入栈
4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。
5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈(“*/”的优先级比“+-”高)
6.最终将栈中的元素依次出栈,输出。

二、代码

#include<iostream>
#include<stack>
using namespace std;


int main(){
	stack <char> sop;
	string strout;
	string strin;
	cin>>strin;
	int pr[1256]={0};
	pr['+']=0;
	pr['-']=0;
	pr['*']=1;
	pr['/']=1;
	pr['(']=-1;
	//cout<<strin<<endl;
	for(int i=0;i<strin.length();i++)
	{
		if(strin[i]>='0' && strin[i]<='9')
		{
			strout.push_back(strin[i]);
		}
		else if(sop.empty())
		{
			sop.push(strin[i]);
		}
		else if(strin[i]=='(')
		{
			sop.push(strin[i]);
		}
		else if(strin[i]==')')
		{
			while(sop.top()!='(')
			{
				strout.push_back(sop.top());
				sop.pop();
			}
			sop.pop();
		}
		else
		{
			while(sop.empty()==false  && pr[sop.top()]>=pr[strin[i]] )
			{
				strout.push_back(sop.top());
				sop.pop();
			}
			sop.push(strin[i]);
		}
	}
	while(sop.empty()==false)
	{
		strout.push_back(sop.top());
		sop.pop();
	}
	cout<<strout<<endl;
	return 0;
}

三、运行例子

猜你喜欢

转载自blog.csdn.net/kupe87826/article/details/114211410
今日推荐