已知中缀表达式,求后缀表达式及值
///
#include <iostream>
using namespace std;
struct ABC
{
char data;
struct ABC * next;
};
int main()
{
char abc[100]="";
char result[100]="";
ABC *p,*q,*sq,*l;
sq=new ABC;
sq->next=NULL;
p=sq;
char str[20]="a+b*c*d+e*f-g";
int i=0;
for(;str[i]!='/0';i++)
cout<<str[i];
cout<<endl;
int j=0;
i=0;
while(str[j]!='/0')
{
switch (str[j])
{
case '+':
case '-':
case '*':
case '/':
q=new ABC;
q->data=str[j];
q->next=NULL;
p->next=q;
p=q;
break;
default :abc[i]=str[j];i++;
}
j++;
}
i=2;
j=2;
result[0]=abc[0];
result[1]=abc[1];
p=sq->next;
l=p->next;
while(abc[i]!='/0')
{
if((p->data=='+' || p->data=='-')&&(l->data=='+' ||l->data=='-'))
{
result[j]=p->data;
result[j+1]=abc[i];
p=l;
l=l->next;
i++;
j=j+2;
}
if((p->next!=NULL&&(p->data=='+' || p->data=='-'))&&(l->data=='*' ||l->data=='/'))
{
result[j]=abc[i];
result[j+1]=l->data;
l=l->next;
i++;
j=j+2;
}
if((p->data=='*' || p->data=='/')&&p->next!=NULL)
{
result[j]=p->data;
result[j+1]=abc[i];
p=l;
l=l->next;
i++;
j=j+2;
}
}
result[j]=abc[i];
result[j++]=p->data;
for(i=0;result[i]!='/0';i++)
cout<<result[i];
return 0;
}
//