操作集如下:
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;
}