#define MAX 100
typedef struct //运算数
{
double a[MAX];
int top;
}OPND;
typedef struct //运算符
{
char a[MAX];
int top;
}OPTR;
void Init_OPND(OPND *s); //初始化运算数栈
void Push_OPND(OPND *s,double x); //push一个运算数
double Pop_OPND(OPND *s); //pop一个运算数
double GetTop_OPND(OPND *s); //取栈顶运算数
void Init_OPTR(OPTR *s); //初始化运算符栈
void Push_OPTR(OPTR *s,char x); //push一个运算符
char Pop_OPTR(OPTR *s); //pop一个运算符
char GetTop_OPTR(OPTR *s); //取栈顶运算符
int IsOpr(char c); //判断输入字符是否为运算符
char Precede(char s,char c); //判断字符的优先级
double Operate(double x,char opr,double y); //计算
void Init_OPND(OPND *s) //初始化运算数栈
{
s->top =-1;
}
void Init_OPTR(OPTR *s) //初始化运算符栈
{
s->top =-1;
}
void Push_OPND(OPND *s,double x) //push一个运算数
{
s->top ++;
s->a [s->top ]=x;
}
void Push_OPTR(OPTR *s,char x) //push一个运算符
{
s->top ++;
s->a [s->top ]=x;
}
double Pop_OPND(OPND *s) //pop一个运算数
{
double x;
x=s->a [s->top];
s->top --;
return x;
}
char Pop_OPTR(OPTR *s) //pop一个运算符
{
char x;
x=s->a [s->top];
s->top --;
return x;
}
double GetTop_OPND(OPND *s) //取栈顶运算数
{
return (s->a[s->top]);
}
char GetTop_OPTR(OPTR *s) //取栈顶运算符
{
return (s->a[s->top]);
}
int IsOpr(char c) //判断输入字符是否为运算符
{
if (c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#'||c=='.')
return 1;
else
return 0;
}
char Precede(char s,char c) //判断字符的优先级
{
switch(s)
{
case '+':
case '-':
{
if(c=='+'||c=='-')
return '>';
else if (c=='*'||c=='/')
return '<';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
}
break;
case '*':
case '/':
{
if(c=='+'||c=='-')
return '>';
else if (c=='*'||c=='/')
return '>';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
}
break;
case '(':
{
if(c==')')
return '=';
else
return '<';
}
break;
case ')':
{
return '>';
}
break;
case '#':
{
if(c=='#')
return '=';
else
return '<';
}
break;
}
return 0;
}
double Operate(double x,char opr,double y) //计算
{
double result;
switch (opr)
{
case '+':
result = x + y;
break;
case '-':
result = x - y;
break;
case '*':
result = x * y;
break;
case '/':
result = x / y;
break;
}
return result;
}
参考资料:这是我自己没事写的,可以运用的