用的方法挺笨的,搞了一个半小时,结果还不对,哪位大佬能帮忙看一下哪里出错了。
#include<iostream>
using namespace std;
//中缀表达式转后缀表达式
typedef struct Stack
{
char* Data;
int Maxsize;
int Top;
}*stack;
stack createstack(int max)
{
stack S = new Stack();
S->Maxsize = max;
S->Data = new char[max];
S->Top = -1;
return S;
}
bool IsFull(stack S)
{
if (S->Top == S->Maxsize - 1)
{
return true;
}
return false;
}
void Push(stack S, char X)
{
S->Data[++S->Top] = X;
}
bool IsEmpty(stack S)
{
if (S->Top == -1)
{
return true;
}
return false;
}
char Get(stack S)
{
return S->Data[S->Top--];
}
void Print(stack S)
{
while (1)
{
if (IsEmpty(S))
{
break;
}
else
{
char temp = Get(S);
if (IsEmpty(S))
{
cout << temp;
}
else
{
cout << temp << ' ';
}
}
}
}
bool First(char c1, char c2)
{
if (c1 == '*' || c1 == '/')
{
if (c2 == '(')
{
return true;
}
else
{
return false;
}
}
else if (c1 == '(')
{
return true;
}
else
{
if (c2 == '*' || c2 == '/' || c2 == '(')
{
return true;
}
else
{
return false;
}
}
}
int main()
{
string L;
cin >> L;
int len = L.length();
stack S = createstack(len);
for (int i = 0; i < len; i++)
{
char c = L[i];
if (c >= '0' && c <= '9')
{
cout << c <<' ';
}
else
{
if (IsEmpty(S))
{
Push(S, c);
}
else
{
if (c == ')')
{
while (1)
{
char ctemp1 = Get(S);
if (ctemp1 == '(')
{
break;
}
cout << ctemp1 << ' ';
}
continue;
}
char ctemp = Get(S);
if (First(ctemp, c))
{
Push(S, ctemp);
Push(S, c);
}
else
{
Push(S, ctemp);
while (1)
{
if (IsEmpty(S))
{
Push(S, c);
break;
}
char ctemp1 = Get(S);
if (First(ctemp1, c))
{
Push(S, ctemp1);
Push(S, c);
break;
}
cout << ctemp1 << ' ';
}
}
}
}
}
Print(S);
system("pause");
return 0;
}