struct Stack
{
int data;
struct Stack* next;
};
void push(struct Stack* stack,int item)
{
struct Stack* tem1 = (struct Stack*)malloc(sizeof(struct Stack));
tem1->data = item;
tem1->next = stack->next;
stack->next = tem1;
}
int pop(struct Stack* stack)
{
struct Stack* tem2 = (struct Stack*)malloc(sizeof(struct Stack));
int p;
tem2 =stack->next;
p = tem2->data;
stack->next = tem2->next;
free(tem2);
return p;
}
int evalRPN(char ** tokens, int tokensSize)
{
struct Stack* stack = (struct Stack*)malloc(sizeof(struct Stack));
stack->next = NULL;
for(int i=0;i<tokensSize;i++)
{
if(tokens[i][0]==42)
{
int m = pop(stack)*pop(stack);
push(stack,m);
}
else if(tokens[i][0]==43)
{
int m = pop(stack)+pop(stack);
push(stack,m);
}
else if((tokens[i][0]==45)&&(tokens[i][1]=='\0'))
{
int j = pop(stack);
int m = pop(stack)-j;
push(stack,m);
}
else if(tokens[i][0]==47)
{
int m = pop(stack)/pop(stack);
push(stack,m);
}
else
{
int n = atoi(tokens[i]);
push(stack,n);
}
}
return pop(stack);
}
逆波兰表达式求值
最新推荐文章于 2022-07-13 22:50:07 发布