表达式求值——栈实现
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; }
相关文章推荐
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 栈实现表达式求值
- 字符串表达式校验&求值(C#实现)
- 实现简单的表达式求值
- 表达式求值算法的实现
- C++实现表达式求值
- 利用栈实现的后缀形式的算术表达式的求值的c++程序
- C++实现任意表达式求值(栈)
- 数据结构习作之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (技术含量少许)
- 使用双栈实现表达式求值
- 顺序栈实现表达式求值
- 在单链表的基础上用c++实现的链栈,并使用进制转换,表达式求值两个小程序来测试
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (转载)
- 用静态栈数据结构实现表达式求值
- 用c++实现中序表达式求值
- 表达式求值程序(用栈实现)
- Linux系统下用C语言实现浮点数四则运算表达式的求值
- 字符串表达式求值 C#实现
- 数据结构课程设计---------用栈来实现表达式求值