#include#include struct stack { int *data; int top; int maxsize; }; struct stack *create(int maxSize) { struct stack *s; s=malloc(sizeof(struct stack)); s->data=malloc(sizeof(int)*maxSize); s->top=-1; s->maxsize=maxSize; return s; } int isFull(struct stack *s) { return s->top==s->maxsize-1; } int isEmpty(struct stack *s) { return s->top==-1; } void push(struct stack *s,int num) { if(isFull(s)) { printf("stack is fulln"); return; } s->data[++s->top]=num; } int pop(struct stack *s) { if(isEmpty(s)) { printf("stack is emptyn"); exit(-1); } int temp=s->data[s->top--]; return temp; } int count(char *expert) { struct stack *s; int n1,n2; s=create(20); for(int i=0; expert[i]!=' '; i++) { switch(expert[i]) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': push(s,expert[i]-48); break; case '+': case '-': case '*': case '/': if(!isEmpty(s)) { n2=pop(s); } else { printf("error1n"); exit(-1); } if(!isEmpty(s)) { n1=pop(s); } else { printf("error1n"); exit(-1); } switch(expert[i]) { case '+': push(s,n1+n2); break; case '-': push(s,n1-n2); break; case '*': push(s,n1*n2); break; case '/': push(s,n1/n2); break; } break; default: printf("error2n"); exit(-1); } } if(s->top!=0) { printf("error3n"); exit(-1); } return s->data[s->top]; } int main() { char arr[]="325*+7-"; printf("%d",count(arr)); }



