【数据结构】中缀表达式转换后缀表达式

我们平时写的数学表达式都是中缀表达式,如:a+b*c+(d*e+f)*g

现在要用计算机来实现这样的表达式,可以转换成后缀表达式再进行运算。自己写了一段代码如下:

#include <iostream>  
#include <stack>
using namespace std;  
void midtotail(char *a)
{
	stack<char> c;
	while (*a!='\0')
	{
		if(*a >= '0' && *a <= '9')
			cout<<*a;
		else if(*a >= 'a' && *a <= 'z')
			cout<<*a;
		else
		{
			if(c.empty() || *a == '(' || *a == '*' || *a == '/')
				c.push(*a);
			else if (*a == ')')
			{
				while (c.top()!= '(')
				{
					cout<<c.top();
					c.pop();
				}
				c.pop();
			}
			else if (*a == '+' || *a == '-')
			{
				if (c.top() != '(')
				{
					while (!c.empty() && c.top()!= '(')
					{
						cout<<c.top();
						c.pop();
					}
				}
				c.push(*a);
			}

		}
		a++;
	}
	while (!c.empty())
	{
		cout<<c.top();
		c.pop();
	}
}
int main()  
{  
	//char a[] = "a+b*c+(d*e+f)*g";
	char *a = new char[30];
	cout<<"请输入一个中缀表达式:";
	cin>>a;
	cout<<"输入的中缀表达式是:";
	cout<<a<<endl;
	cout<<"后缀表达式是:";
	midtotail(a);
	cout<<endl;
	delete [] a;
    return 0;  
}

相关文章

【啊哈!算法】算法3:最常用的排序——快速排序       ...
匿名组 这里可能用到几个不同的分组构造。通过括号内围绕的正...
选择排序:从数组的起始位置处开始,把第一个元素与数组中其...
public struct Pqitem { public int priority; ...
在编写正则表达式的时候,经常会向要向正则表达式添加数量型...
来自:http://blog.csdn.net/morewindows/article/details/6...