利用堆栈实现后缀表达式求值

操作集如下:

C语言代码实现

  • Pile:堆栈
  • CreerPile:建立堆栈
  • Pile_vide:判断堆栈是否为空
  • Pile_pleine:判断堆栈是否满
  • empiler:入栈
  • depiler : 出栈

#include <stdio.h>
#include <stdlib.h>


typedef struct Pile{
    int *tab;
    int max;
    int n;
}Pile;

Pile *Creer_Pile(int Nb_max)
{
    int *tab=malloc(sizeof(Nb_max*sizeof(int)));
    if(tab==NULL)
        return NULL;
    Pile *p=malloc(sizeof(Pile));
    if(p==NULL){
        free(tab);
        return NULL;
    }
    p->tab=tab;
    p->max=Nb_max;
    p->n=0;
    return p;
}
int Pile_vide(Pile *p)
{
    if(p->n==0)
        return 1;
    else
        return 0;
}

int Pile_pleine(Pile *p)
{
    if(p->n==p->max)
        return 1;
    else
        return 0;
}

int empiler(Pile *p, int element)
{
    if(Pile_pleine(p)){
        printf("debordement");
        return 0;
    }
    else{
        p->tab[p->n++]=element;
        return 1;
    }
}


int depiler(Pile *p, int *s)
{
    if(Pile_vide(p)){
        return 0;
    }
    else{
        *s=p->tab[--p->n];
        return 1;
    }
}

int calcul(char *ch)
{
    int nb1,nb2,nb,k=0;
    Pile *p=Creer_Pile(20);
    while(ch[k]!='\0'){
        while(ch[k]>'0'&&ch[k]<='9'){
            nb=ch[k]-'0';
            empiler(p,nb);
            k++;
        }
        switch(ch[k]){
        case'+':{depiler(p,&nb1);depiler(p,&nb2);nb=nb1+nb2;break;}
        case'*':{depiler(p,&nb1);depiler(p,&nb2);nb=nb1*nb2;break;}
        case'-':{depiler(p,&nb1);depiler(p,&nb2);nb=nb1-nb2;break;}
        case'/':{depiler(p,&nb1);depiler(p,&nb2);nb=nb1/nb2;break;}
        }
        empiler(p,nb);
        k++;
    }
    depiler(p,&nb);
    return nb;
}



int main()
{   char s[20];
    printf("input your expression");
    gets(s);
    int resultat=calcul(s);
    printf("%d",resultat);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值