码迷,mamicode.com
首页 > 其他好文 > 详细

中缀表达式转后缀表达式

时间:2015-04-10 20:18:53      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:c++   数据结构      

                                    中缀表达式转后缀表达式

思路:
   1:初始化一空栈,用来对符号进出栈使用
   2:遇到“+ - * / ("进栈
   3:若是 + 号或 - 号在*或/的后面(就是栈顶),先将*或/出栈,再+或-出栈
   4:遇到右括号就一直出栈,直到到达左括号后结束
   5:最后将栈清空(因为循环结束后栈中还有符号元素没出栈)

#include <iostream>
using namespace std;
int main()
{
	char a[1000],b[1000];
	int i,k;
	while (cin >> a)
	{
		k=-1;
		for (i=0;a[i]!='\0';++i)
		{
			if (a[i]=='-'||a[i]=='+'||a[i]=='*'||a[i]=='/'||a[i]=='(')//判断是否进栈元素
			{
				b[++k]=a[i];
			}
			else if (a[i]>='0'&&a[i]<='9')
			{
				cout << a[i];
			}
			if(a[i]==')')//遇到右括号就将进栈的元素出栈到左括号
			{
				while (b[k]!='(')
				{
					cout << b[k];
					k--;
				}
				k--;
			}
			if (k>=1&&(a[i]=='-'||a[i]=='+')&&(b[k-1]=='*'||b[k-1]=='/'))
				//判断元素的优先级,若乘除在加减下面就由下而上出栈
			{
				cout << b[k-1] << b[k] ;
				k-=2;
			}
		}
		while(k!=-1)//最后将栈内元素清空
		{
			cout << b[k];
			k--;
		}
		cout << endl;
	}
	return 0;
}

中缀表达式转后缀表达式

标签:c++   数据结构      

原文地址:http://blog.csdn.net/zsc2014030403015/article/details/44982839

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!