Lintcode和计蒜客上的一道难题。
难点在于式子的转换。转化成逆波兰式之后,计算的算法写起来很方便。
#include
#include
#include
#include
#define ERROR 0
#define OK 1
typedef struct Stack {
int *elements;
int max_size,top_index;
} Stack;
void init(Stack* s,int length) {
s->elements=(int *)malloc(sizeof(int)*length);
s->max_size=length;
s->top_index=-1;
}
int push(Stack *s,int element) {
if(s->top_index >= s->max_size-1){
return ERROR;
}
s->top_index++;
s->elements[s->top_index]=element;
return OK;
}
int pop(Stack* s) {
if(s->top_index < 0){
return ERROR;
}
s->top_index--;
return OK;
}
int top(Stack* s) {
return s->elements[s->top_index];
}
int empty(Stack* s) {
if(s-&g