复习下数据结构,用栈简单实现逆波兰表达式,参考文档:
http://www.nowamagic.net/librarys/veda/detail/2307 http://www.nowamagic.net/librarys/veda/detail/2306
直接上代码:
/** *code by lichmama from cnblogs.com *@逆波兰表达式的C实现 *算术支持的运算模式: * 四则运算; * 操作数不得大于9; * 中间数(即运算当中的临时变量)不得超过127 **/ #include <stdio.h> #include <stdlib.h> typedef struct __STACK__ { char op; struct __STACK__ *next; }STACK, *PSTACK; void init(PSTACK *); void push(PSTACK *, char); void pop(PSTACK *, char *); void clear(PSTACK *); void destroy(PSTACK *); char getoplevel(char op){ if(op=='+' || op=='-') return 1; if(op=='*' || op=='/') return 2; return 0; } char calc(char *rpn){ char *p=rpn; char e; int x, y; PSTACK pStack; init(&pStack); while(*p){ if(0<=*p && *p<=9){ push(&pStack, *p); }else { pop(&pStack, &e);x=e; pop(&pStack, &e);y=e; switch(*p){ case '+':push(&pStack, y+x);break; case '-':push(&pStack, y-x);break; case '*':push(&pStack, y*x);break; case '/':push(&pStack, y/x);break; } } p++; } pop(&pStack, &e); free(pStack);pStack=NULL; return e; } int main(void){ char e; char old_exp[]="(3-1)*3+8/2+(9*3/(2+1)+3*4/6)-2="; char rpn_exp[256]=""; char *p=old_exp; char *r=rpn_exp; PSTACK gStack; init(&gStack); // while(*p!='