#include <stdio.h>
#include <stdlib.h>
struct stack {
int v;
struct stack *next;
};
void init(struct stack **h)
{
*h
= malloc(sizeof(struct stack
)); (*h)->next = NULL;
}
void push(struct stack *h, int v)
{
struct stack *t;
t
= malloc(sizeof(struct stack
)); t->v = v;
t->next = h->next;
h->next = t;
}
int pop(struct stack *h)
{
int v;
struct stack *t;
t = h->next;
h->next = t->next;
v = t->v;
return v;
}
int stack_empty(struct stack *h)
{
return h->next == NULL;
}
int main(void)
{
int op, n, c, op1, op2;
struct stack *number, *operator;
char s[200];
init(&number);
init(&operator);
if(c <= '9' && c >= '0')
{
n = c-'0';
while((c
= getchar()) && c
<= '9' && c
>= '0') {
n = n*10+c-'0';
}
push(number, n);
}
if(c == '\n' || c == EOF) break;
if(c == '+' || c == '-' || c == '*')
{
push(operator, (int) c);
} else if(c == ')')
{
op = pop(operator);
if(op == '+'){
n = pop(number)+pop(number);
push(number, n);
} else if(op == '-'){
op1 = pop(number);
op2 = pop(number);
n = op2-op1;
push(number, n);
} else if(op == '*'){
n = pop(number)*pop(number);
push(number, n);
}
}
}
printf("Evaluation: %d\n", pop
(number
));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBzdGFjayB7CglpbnQgdjsKCXN0cnVjdCBzdGFjayAqbmV4dDsKfTsKCnZvaWQgaW5pdChzdHJ1Y3Qgc3RhY2sgKipoKQp7CgkqaCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0YWNrKSk7CgkoKmgpLT5uZXh0ID0gTlVMTDsKfQoKdm9pZCBwdXNoKHN0cnVjdCBzdGFjayAqaCwgaW50IHYpCnsKCXN0cnVjdCBzdGFjayAqdDsKCQoJdCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0YWNrKSk7Cgl0LT52ID0gdjsKCXQtPm5leHQgPSBoLT5uZXh0OwoJaC0+bmV4dCA9IHQ7Cn0KCmludCBwb3Aoc3RydWN0IHN0YWNrICpoKQp7CglpbnQgdjsKCXN0cnVjdCBzdGFjayAqdDsKCQoJdCA9IGgtPm5leHQ7CgloLT5uZXh0ID0gdC0+bmV4dDsKCXYgPSB0LT52OwoJZnJlZSh0KTsKCQoJcmV0dXJuIHY7Cn0KCmludCBzdGFja19lbXB0eShzdHJ1Y3Qgc3RhY2sgKmgpCnsKCXJldHVybiBoLT5uZXh0ID09IE5VTEw7Cn0KCmludCBtYWluKHZvaWQpCnsKCWludCBvcCwgbiwgYywgb3AxLCBvcDI7CglzdHJ1Y3Qgc3RhY2sgKm51bWJlciwgKm9wZXJhdG9yOwoJY2hhciBzWzIwMF07CgkKCWluaXQoJm51bWJlcik7Cglpbml0KCZvcGVyYXRvcik7Cgl3aGlsZSgoYyA9IGdldGNoYXIoKSkgIT0gJ1xuJyl7CgkJaWYoYyA8PSAnOScgJiYgYyA+PSAnMCcpCgkJewoJCQluID0gYy0nMCc7CgkJCXdoaWxlKChjID0gZ2V0Y2hhcigpKSAmJiBjIDw9ICc5JyAmJiBjID49ICcwJykKCQkJewoJCQkJbiA9IG4qMTArYy0nMCc7CgkJCX0KCQkJcHVzaChudW1iZXIsIG4pOwoJCX0KCQlpZihjID09ICdcbicgfHwgYyA9PSBFT0YpIGJyZWFrOwoJCWlmKGMgPT0gJysnIHx8IGMgPT0gJy0nIHx8IGMgPT0gJyonKQoJCXsKCQkJcHVzaChvcGVyYXRvciwgKGludCkgYyk7CgkJfSBlbHNlIGlmKGMgPT0gJyknKQoJCXsKCQkJb3AgPSBwb3Aob3BlcmF0b3IpOwoJCQlpZihvcCA9PSAnKycpewoJCQkJbiA9IHBvcChudW1iZXIpK3BvcChudW1iZXIpOwoJCQkJcHVzaChudW1iZXIsIG4pOwoJCQl9IGVsc2UgaWYob3AgPT0gJy0nKXsKCQkJCW9wMSA9IHBvcChudW1iZXIpOwoJCQkJb3AyID0gcG9wKG51bWJlcik7CgkJCQluID0gb3AyLW9wMTsKCQkJCXB1c2gobnVtYmVyLCBuKTsKCQkJfSBlbHNlIGlmKG9wID09ICcqJyl7CgkJCQluID0gcG9wKG51bWJlcikqcG9wKG51bWJlcik7CgkJCQlwdXNoKG51bWJlciwgbik7CgkJCX0KCQl9Cgl9CglwcmludGYoIkV2YWx1YXRpb246ICVkXG4iLCBwb3AobnVtYmVyKSk7CglmcmVlKG51bWJlcik7CglmcmVlKG9wZXJhdG9yKTsKCQoJcmV0dXJuIDA7Cn0K