2 baidu 34387683 baidu_34387683 于 2016.03.22 17:59 提问

中缀表达式转换成后缀表达式,求大神帮忙找下错误,谢谢

#include
#include
typedef struct huozhui{
char c;
struct huozhui next;
}huozhui;
void push(huozhui *L,char x)
{
huozhui *p=(huozhui *)malloc(sizeof(huozhui));
p->c=x;
p->next=L->next;
L->next=p;
}
int isoperator(char x)
{
if(x=='+'||x=='-'||x=='
'||x=='/'||x=='('||x==')')
return 0;
else
return 1;
}
int bijiao(char x)
{
switch(x)
{
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;

}
return -1;
}
int isempty(huozhui *L)
{
return L->next==NULL;
}
void pop(huozhui *L)
{
if(L->next==NULL)
return ;
else
{
huozhui *p;
p=L->next;
L->next=p->next;
free(p);
}
}
char top(huozhui *L)
{
if(L->next==NULL)
return 0;
else
return L->next->c;

}
int main()
{
huozhui *L=(huozhui *)malloc(sizeof(huozhui));
L->next=NULL;
char s[100],key[200];
gets(s);
int i,k=0;
for(i=0;s[i]!='\0';i++)
{
if(isoperator(s[i])==1)
{
key[k++]=s[i];
}
else
{
if(isempty(L))
{
push(L,s[i]);
}
else
{
if(s[i]==')')
{
while(!isempty(L)&&top(L)!='(')
{
key[k++]=top(L);
pop(L);
}
pop(L);
}
else
{
if(s[i]=='(')
push(L,s[i]);
else
{
while(bijiao(top(L))>=bijiao(s[i])&&!isempty(L))
{
key[k++]=top(L);
pop(L);
}
push(L,s[i]);
}
}
}
}
}
huozhui *p=L->next;
while(p!=NULL)
{
key[k]=p->c;
p=p->next;
k++;
}
key[k]='\0';
for(i=0;i<k;i++)
{
if(i!=0)
printf(" ");
printf("%c",key[i]);
}
puts("");
return 0;
}

2个回答

devmiao
devmiao   Ds   Rxr 2016.03.22 18:01
devmiao
devmiao   Ds   Rxr 2016.03.22 18:01
baidu_34387683
baidu_34387683 我看过这个,请问我的什么地方错了,基本上数据都对,但交上去还是有一个测试数据错
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!