数据结构中表达式求值问题,望高手给予解答。
程序代码:程序运行得不到结果。(不需要考虑大整数)
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 编辑 ]









