SDUT2484 算术表达式的转换

来源:互联网 发布:折扣吧淘宝优站 编辑:程序博客网 时间:2024/06/11 17:55

这是一个将中缀式转化成表达式树然后在遍历输出的题

代码操作总结为:

1、把中缀式转换为后缀式。

2、把后缀式转化为表达式树。

3、将表达式树先序、中序、后序遍历得出前缀式、中缀式、后缀式。


以下是代码:

#include <stdio.h>#include <malloc.h>struct node{    char s;    struct node *l,*r;};char sa[100],sb[100],sc[100];int p;void first(struct node *q){    if(q==NULL)    {        return ;    }    printf("%c",q->s);    first(q->l);    first(q->r);}void infix(struct node *q){    if(q==NULL)    {        return ;    }    infix(q->l);    printf("%c",q->s);    infix(q->r);}void postfix(struct node *q){    if(q==NULL)    {        return ;    }    postfix(q->l);    postfix(q->r);    printf("%c",q->s);}void h(){    int x=0,y=0;    for(p=0; sa[p]!='#'; p++)    {        if(sa[p]>='a'&&sa[p]<='z')///如果是数字        {            sb[x]=sa[p];            x++;        }        else if(sa[p]=='+'||sa[p]=='-')        {            while(y!=0&&sc[y-1]!='(')            {                sb[x]=sc[y-1];                x++;                y--;            }            sc[y]=sa[p];            y++;        }        else if(sa[p]=='*'||sa[p]=='/')        {            while(y!=0&&(sc[y-1]=='*'||sc[y-1]=='/'))            {                sb[x]=sc[y-1];                x++;                y--;            }            sc[y]=sa[p];            y++;        }        else if(sa[p]=='(')        {            sc[y]=sa[p];            y++;        }        else if(sa[p]==')')        {            while(sc[y-1]!='(')            {                sb[x]=sc[y-1];                x++;                y--;            }            y--;        }    }    while(y!=0)    {        sb[x]=sc[y-1];        x++;        y--;    }    sb[x]='\0';}int main(){    int d=0,i;    scanf("%s",sa);    h();    struct node *po[100]={NULL},*pi;    for(i=0;i<p;i++)    {        if(sb[i]>='a'&&sb[i]<='z')        {            pi=(struct node *)malloc(sizeof(struct node));            pi->s=sb[i];            pi->l=NULL;            pi->r=NULL;            po[d]=pi;            d++;        }        else        {            pi=(struct node *)malloc(sizeof(struct node));            pi->s=sb[i];            pi->r=po[d-1];            d--;            pi->l=po[d-1];            d--;            po[d]=pi;            d++;        }    }    first(po[0]);    printf("\n");    infix(po[0]);    printf("\n");    postfix(po[0]);    printf("\n");    return 0;}



原创粉丝点击