改进版:
#include
#include
#include
#include
#define ERROR 0
#define OVERFLOW -2
#define OK 1
typedef int status;
typedef char SElemType;
//////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
#define STACK_INIT_SIZE 100
#define STACKINCRMENT 10
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
status initstack(SqStack *S)
{//构造一个空栈.
(*S).base=(SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!(*S).base)return(ERROR);
(*S).top=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
return(OK);
}
status push(SqStack *S,SElemType e)
{// 操作数和运算符依此进栈.
if((*S).top - (*S).base >=(*S).stacksize)
{
(*S).base =(SElemType * )realloc((*S).base,((*S).stacksize + STACKINCRMENT) *
sizeof(SElemType));
if(!(*S).base )exit(OVERFLOW);
(*S).top =(*S).base + (*S) .stacksize ;
(*S).stacksize +=STACKINCRMENT;
}
*(*S).top++=e;
return(e);
}
status pop(SqStack *S,SElemType *e)
{//出栈.
if((*S).top == (*S).base )return(ERROR);
*e=*--(*S).top ;
return (e);
}
SElemType GetTop(SqStack S)
{//取栈顶元素.
SElemType e;
if(S.base == S.top )return(OVERFLOW);
e=*(S.top-1);
return(e);
}
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
char Precede(char c1, char c2)
{
//符号优先级别的判断
switch(c1)
{
case '+':
case '-':
if(c2 == '*' || c2 == '/' || c2 == '(') return('');
break;
case'*':
case'/':
if(c2 == '(') return(''); break;
case'(':
if(c2 == ')')return('=');
else return('');break;
case'#':
if(c2 == '#')return('=');
else return('':
{
pop(&OPTR, &theta);
pop(&OPND, &b);
pop(&OPND, &a);
push(&OPND,Operate(a,theta,b));
break;
}
}
}
return GetTop(OPND);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
int i;
printf("'#'为结束符!");
printf("please input a suanshi:");
i=EvaluateExpression()-'0';
printf("the result is%dn",i);
}