《算术表达式求值的运算符优先算法C语言完整代码》由会员分享,可在线阅读,更多相关《算术表达式求值的运算符优先算法C语言完整代码(4页珍藏版)》请在金锄头文库上搜索。
1、#include#include#include#define STACK_INIT_SIZE 100#define STACKINCREMENT 10# define TRUE 1# define FALSE 0typedef int Status;typedef char SElemType;typedef struct SElemType *base;SElemType *top;int stacksize;StackChar; /sequence 序列typedef struct float *base;float *top;int stacksize;StackFloat; /seq
2、uence 序列Status InitStack(StackChar *S)/初始化空桟*S=(StackChar *)malloc(sizeof(StackChar);(*S)-base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!(*S)-base) exit(OVERFLOW);(*S)-top=(*S)-base;(*S)-stacksize=STACK_INIT_SIZE;return OK;/ InitStack(&S);Status initStack(StackFloat *S)/初始化空桟*S=(Stac
3、kFloat *)malloc(sizeof(StackFloat);(*S)-base=(float *)malloc(STACK_INIT_SIZE*sizeof(float);if(!(*S)-base) exit(OVERFLOW);(*S)-top=(*S)-base;(*S)-stacksize=STACK_INIT_SIZE;return OK;/ initStack(&S);Status Pop(StackChar *S,SElemType *a)if(*S)-top=(*S)-base) printf(ERROR!n); return ERROR; *a=*(-(*S)-to
4、p);return OK;/ Pop(&S,&e);Status pop(StackFloat *S,float *a)if(*S)-top=(*S)-base) printf(ERROR!n); return ERROR; *a=*(-(*S)-top);return OK;/ Pop(&S,&e);Status Push(StackChar *S,SElemType e)*S-top+=e; return OK;/Push(S,e);Status push(StackFloat *S,float e)*S-top+=e; return OK;/push(S,e);SElemType Get
5、Top(StackChar S)SElemType e;e=*(S.top-1); return e;/GetTop(*S,&e);float getTop(StackFloat S)float e;e=*(S.top-1); return e;/GetTop(*S,&e);int InOP(char c)/判断 c 是否为运算符,是返回 TRUE,否则返回 FALSEswitch (c)case +: return TRUE;case -: return TRUE;case *: return TRUE;case /: return TRUE;case (: return TRUE;case
6、 ): return TRUE;case #: return TRUE;default: return FALSE;/InOP(b2)char precede(SElemType e,char c)/判断 e 和 c 的优先级,若 e 的优先权小于 c 返回;char OP7=+,-,*,/,(,),#;switch (e)case +: if (c=+|c=-|c= )|c=#) return ;else return ;else return ;else return ;else return ;case #: if (c=) printf(#-):FALSEn);break;else if (c=#) return =;else return : / 退栈并将运算结果入栈Pop(&OPTR, &oprtr);pop(&OPND, &b); pop(&OPND, &a); push(OPND, Operate(a, oprtr, b); break; / switch / whileprintf(=%fn,getTop(*OPND); / EvaluateExpressionvoid main()EvaluateExpression();