数据结构中表达式求值问题,望高手给予解答。
程序代码:
程序运行得不到结果。(不需要考虑大整数) typedef char SElemType; typedef struct{ SElemType *base; SElemType *top; int stacksize; }Sqstack; typedef struct{ int*base; int*top; int stacksize; }sqstack; typedef char Status; #define STACK_INIT_SIZE 20 #define STACKINCREMENT 6 #define TRUE 1 #define FALSE 0 #include <stdio.h> #include<stdlib.h> Status Initstack (Sqstack &S) { S.base=(SElemType*)malloc(STACK_INIT_SIZE *sizeof(SElemType)); if (!S.base) return FALSE; S.top= S.base ; S. stacksize=STACK_INIT_SIZE; return TRUE; } Status push(Sqstack &S,SElemType e) { if (S. top -S. base== S. stacksize) { SElemType*p; p=(SElemType*)realloc(S.base , (S.stacksize+STACKINCREMENT )*sizeof(SElemType)); if (!p) return FALSE; S.base=p; S. top = S. base+ S. stacksize; S. stacksize+= STACKINCREMENT; } *S.top=e; S.top++; return TRUE; } Status pop(Sqstack &S, SElemType &e) { if (S.top==S.base ) return FALSE; e=*(S.top-1); S.top--; return TRUE; } Status GetTop(Sqstack S,SElemType &e){ if(S.base==S.top) return FALSE; e=*(S.top-1); return TRUE; } char Precede(SElemType a,SElemType b){ switch (b){ case '+': case '-': switch (a){ case'(': case'#': return'<';break; default: return'>'; }break; case'*': case'/': switch(a){ case'*': case'/': return'>';break; default: return'<'; }break; case'(': return'<';break; case')':switch (a){ case'(': return '=';break; default: return '>'; } case'#': return '>';break; default: return FALSE; } } char Operate(SElemType a,SElemType theta,SElemType b){ char c; a=a-48; b=b-48; switch(theta){ case '+':c=a+b+48;break; case '-':c=a-b+48;break; case '*':c=a*b+48;break; case '/':c=a/b+48;break; } return c; } In(SElemType y){ if(y=='+'||y=='-'||y=='*'||y=='/'||y=='#') return FALSE; else return TRUE; } void main(){SElemType c,x,theta,a,b;Sqstack OPTR;Sqstack OPND; Initstack(OPTR); push(OPTR,'#'); Initstack(OPND); printf("请输入表达式:\n"); c=getchar(); while(c!='#'||GetTop(OPTR,x)!='#'){ if(In(c)){push(OPND,c);c=getchar();} else switch(Precede(GetTop(OPTR,x),c)){ case'<': push(OPTR,c);c=getchar(); break; case'=': pop(OPTR,x);c=getchar(); break; case'>': pop(OPTR,theta); pop(OPND,b);pop(OPND,a); push(OPND,Operate(a,theta,b)); break; } } printf("计算结果:%c",*(OPND.top-1)); } 程序运行到此就没反应了。请高手指点,非常感激。
[ 本帖最后由 heshiyuan 于 2009-11-6 16:46 编辑 ]