您的位置:首页 > 其它

表达式求值——栈实现

2014-08-22 16:56 357 查看
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
char stack[MAX];
int top=-1;

void fun( char a[],char b[])
{
int i,len,j;
len=strlen(a);
j=-1;
for(i=0;i<len;i++)
{
switch(a[i])
{
case '(':stack[++top]='(';break;

case '-':
case '+':while(top>=0&&stack[top]!='(')   //当遇到"+-"时,到"("前的运算符全部出栈
b[++j]=stack[top--];
stack[++top]=' ';                //运算符进栈前先进去一个' '
stack[++top]=a[i];               //运算符进栈
break;

case '*':
case '/':while(top>=0&&stack[top]!='('&&stack[top]!='+'&&stack[top]!='-')
b[++j]=stack[top--];        //当遇到"*/"时,到"( + -"前的运算符全部出栈
stack[++top]=' ';
stack[++top]=a[i];

break;
case')':while(stack[top]!='(')
b[++j]=stack[top--];
top--;
break;
default:
b[++j]=a[i];
if(a[i+1]<'0'||a[i+1]>'9')
{
b[++j]=' ';
}
}
}
while(top>=0)
b[++j]=stack[top--];
b[++j]='\0';
//    for(i=0;i<=j;i++)
//        printf("%c",b[i]);
}
int compvalue(char exp[])
{
int i,len,sum=0,c;
top=-1;
int digit[MAX];
len=strlen(exp);

for(i=0;i<len;i++)
{
switch( exp[i] )
{
case' ': break;
case'+': sum=digit[top]+digit[top-1];
digit[--top]=sum;
break;
case'-':sum=digit[top-1]-digit[top];
digit[--top]=sum;

break;
case'*':sum=digit[top]*digit[top-1];
digit[--top]=sum;
break;
case'/':sum=digit[top-1]/digit[top];
digit[--top]=sum;
break;
default:
c=0;
while(exp[i]>='0'&&exp[i]<='9')
{
c=c*10+exp[i]-'0';
i++;
}
digit[++top]=c;
}
}
return digit[0];
}
int main()
{
char a[MAX],b[MAX];
scanf("%s",a);
fun(a,b);
printf("%s\n",b);
printf("%d\n",compvalue(b));
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: