表达式求值的一个有关问题
表达式求值的一个问题
这个星期我做了一个表达式求值的程序(输入、输出和中间结果均只能是0~9):
大概是这样的:输入一个中序表达式,用一个转换程序变为后序表达式,再对后序表达式求值,这两个子程序我都做出来了然后是主程序:我将转换出来的后序表达式存储再一个数组里,将数组头指针传递给求值程序,但就是这里出错了。希望高手指教!谢谢!!
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 2
typedef char SElemType;
typedef struct SqStack{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack *S){ /*初始化栈 */
(*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;
}
char GetTop(SqStack S){ /*取栈顶元素 */
if(S.top == S.base)
return ERROR;
return *(S.top - 1);
}
Status Push(SqStack *S,SElemType e){ /*入栈 */
if((*S).top - (*S).base > = (*S).stacksize){
(*S).base = (SElemType *)realloc((*S).base,
((*S).stacksize + STACKINCREMENT) * sizeof
(SElemType));
if (!(*S).base)
exit (OVERFLOW);
(*S).top = (*S).base + (*S).stacksize;
(*S).stacksize += STACKINCREMENT;
}
*((*S).top)++ = e;
return OK;
}
char Pop(SqStack *S,SElemType *e){ /*出栈 */
if((*S).top == (*S).base)
return ERROR;
*e = * --(*S).top;
return *e;
}
Status In(char c){ /*判断是否为运算符 */
int i;
int j = 0;
char OP[] = { '+ ', '- ', '* ', '/ ', '( ', ') ', '# '};
for (i = 0; i <= 6; i++){
if (c == OP[i])
j++;
}
if (j)
return TRUE;
else
return FALSE;
}
char Precede(char opnd1, char opnd2){ /*运算符优先级 */
int i, j;
char guanxi[7][7]={ '> ', '> ', ' < ', ' < ', ' < ', '> ', '> ',
'> ', '> ', ' < ', ' < ', ' < ', '> ', '> ',
这个星期我做了一个表达式求值的程序(输入、输出和中间结果均只能是0~9):
大概是这样的:输入一个中序表达式,用一个转换程序变为后序表达式,再对后序表达式求值,这两个子程序我都做出来了然后是主程序:我将转换出来的后序表达式存储再一个数组里,将数组头指针传递给求值程序,但就是这里出错了。希望高手指教!谢谢!!
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 2
typedef char SElemType;
typedef struct SqStack{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack *S){ /*初始化栈 */
(*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;
}
char GetTop(SqStack S){ /*取栈顶元素 */
if(S.top == S.base)
return ERROR;
return *(S.top - 1);
}
Status Push(SqStack *S,SElemType e){ /*入栈 */
if((*S).top - (*S).base > = (*S).stacksize){
(*S).base = (SElemType *)realloc((*S).base,
((*S).stacksize + STACKINCREMENT) * sizeof
(SElemType));
if (!(*S).base)
exit (OVERFLOW);
(*S).top = (*S).base + (*S).stacksize;
(*S).stacksize += STACKINCREMENT;
}
*((*S).top)++ = e;
return OK;
}
char Pop(SqStack *S,SElemType *e){ /*出栈 */
if((*S).top == (*S).base)
return ERROR;
*e = * --(*S).top;
return *e;
}
Status In(char c){ /*判断是否为运算符 */
int i;
int j = 0;
char OP[] = { '+ ', '- ', '* ', '/ ', '( ', ') ', '# '};
for (i = 0; i <= 6; i++){
if (c == OP[i])
j++;
}
if (j)
return TRUE;
else
return FALSE;
}
char Precede(char opnd1, char opnd2){ /*运算符优先级 */
int i, j;
char guanxi[7][7]={ '> ', '> ', ' < ', ' < ', ' < ', '> ', '> ',
'> ', '> ', ' < ', ' < ', ' < ', '> ', '> ',