中缀表达式转后缀表达式
程序员文章站
2022-06-03 16:00:02
...
#include<bits/stdc++.h>
using namespace std;
char a[305];
typedef struct node
{
char a;
struct node *next;
}node,*link;
int cmp(char i)
{
if(i=='+'||i=='-') return 1;
else if(i=='*'||i=='/') return 2;
else if(i=='('||i==')') return 0;
return -1;
}
void Push(link &L,char i)
{
link t=new node;
t->a=i;
t->next=L;
L=t;
}
void Pop(link &L)
{
link p=L;
L=L->next;
delete p;
}
int main()
{
link L=new node;
L=NULL;
Push(L,'#');
scanf("%s",a);
for(int i=0;a[i]!='\0';i++)
{
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
{
printf("%c",a[i]);
continue;
}
if(L->a=='#'||a[i]=='(') Push(L,a[i]);
else if(a[i]==')')
{
while(L->a!='(')
{
printf("%c",L->a);
Pop(L);
}
Pop(L);
}
else
{
while(cmp(L->a)>=cmp(a[i]))
{
printf("%c",L->a);
Pop(L);
}
Push(L,a[i]);
}
}
while(L->a!='#')
{
if(L->a!='('&&L->a!=')') printf("%c",L->a);
Pop(L);
}
printf("\n");
}