实现表达式求值(c++实现)
来源:互联网 发布:mac pro测评 编辑:程序博客网 时间:2024/06/05 04:26
这是任意表达式求解的实现,只限于四则运算。
////表达式求解所使用栈的实现部分////#ifndef _STACK_H#define _STACK_H#include<iostream>using namespace std;#define INIT_STACK_SIZE 20#define ElemType inttypedef struct{ElemType *base;int capacity;int top;}Stack;void InitStack(Stack *st);void Push(Stack *st, ElemType x);void ShowStack(Stack *st);void Pop(Stack *st);void Pop(Stack *st,ElemType *v);ElemType GetTop(Stack *st);void ClearStack(Stack *st);bool IsFull(Stack *st){return st->top >= st->capacity;}bool IsEmpty(Stack *st){return st->top == 0;}void InitStack(Stack *st){st->base = (ElemType *)malloc(sizeof(ElemType) * INIT_STACK_SIZE);st->capacity = INIT_STACK_SIZE;st->top = 0;}void Push(Stack *st, ElemType x){if(!IsFull(st)){st->base[st->top++] = x;}else{cout<<"栈满,不能入栈!"<<endl;}}void ShowStack(Stack *st){for(int i=st->top-1; i>=0; --i){cout<<st->base[i]<<endl;}}void Pop(Stack *st){if(!IsEmpty(st)){st->top--;}else{cout<<"栈空,不能出栈!"<<endl;}}void Pop(Stack *st,ElemType *v){if(!IsEmpty(st)){*v = st->base[--st->top];}else{cout<<"栈空,不能出栈!"<<endl;}}ElemType GetTop(Stack *st){if(!IsEmpty(st)){return st->base[st->top-1];}else{cout<<"栈空,不能获取栈顶元素!"<<endl;return -1;}}void ClearStack(Stack *st){st->top = 0;}#endif
//////表达式求解实现部分////#include<iostream>#include"../Test12_30DS/Stack/Stack.h" //是我的栈实现的头文件,可以根据自己的实际情况来改写using namespace std;#include<string.h>bool IsOper(char ch) //判断是否是符号{if(ch=='[' || ch=='(' || ch=='+' || ch=='-'||ch=='*' || ch== '/' || ch==']' || ch==')' || ch=='#')return true;elsereturn false;} //内 外char Compare(char in, char out) // 比较栈顶的符号和站外的优先级大小{if(in == '+' || in == '-'){if(out=='+' || out=='-' || out==')' || out=='#')return '>';elsereturn '<';}else if(in == '*' || in == '/'){if(out == '(')return '<';else return '>';}else if(in == '('){if(out == ')')return '=';else return '<';}else if(in == ')'){return '>';}else{if(out == '#')return '=';else return '<';}}// 左值 操作符 右值int Evaluate(int a,int op,int b) //进行两数的运算{if(op == '+')return a+b;else if(op == '-')return a-b;else if(op == '*')return a*b;elsereturn a/b;}int EvaluateExpression(char *exp){Stack OPO,OPD;int a,b;int op;InitStack(&OPO);InitStack(&OPD);Push(&OPO,'#');while(*exp!='#' || GetTop(&OPO)!='#'){if(IsOper(*exp)){switch(Compare(GetTop(&OPO), *exp)){case '>':Pop(&OPD,&b);Pop(&OPD,&a);Pop(&OPO,&op);Push(&OPD,Evaluate(a,op,b));break;case '<':Push(&OPO,*exp);exp++;break;case '=':Pop(&OPO);exp++;break;default:break;}}else{ int s=0;while(!IsOper(*exp)) //将数字符转化成数字{s=s*10+*exp-'0';exp++;}Push(&OPD,s); //数字符入栈 }}return GetTop(&OPD); // 最后的结果}void main(){char exp[30]; cout<<"请输入表达式:> ";cin>>exp;strcat(exp,"#");int result = EvaluateExpression(exp);cout<<"表达式结果为:> "<<result<<endl;}
0 0
- c实现表达式求值
- 栈实现表达式求值(C语言)
- 表达式求值--栈(c++/java实现)
- 栈实现表达式求值(C语言)
- 表达式求值:Objective-C实现
- 表达式求值 递归实现(c/c++)
- 表达式求值(栈实现)
- 表达式求值(c++实现)
- 表达式求值 (递归实现)
- c语言:表达式求值实现(包含加减乘除括号)
- 数据结构c语言实现表达式求值
- c语言数据结构实现后缀表达式求值
- c语言栈实现表达式求值
- 实现表达式求值(c++实现)
- C++实现表达式求值
- 栈实现表达式求值
- 表达式求值,Java实现
- 表达式求值 - Java实现
- MYSQL手册 以及PHPINFO里面的设置
- 在android模拟器下显示jquery mobile的页面
- Java File
- 求质数1 C实现
- 我的学习之旅(7) build工具
- 实现表达式求值(c++实现)
- IOC
- 通过vnc 用电脑 控制 手机
- 黑马程序员---第一个IOS程序
- ZeroMQ介绍
- Mac PhotoShop CS6破解
- ZIGBee拓扑
- AS3 纯代码打造不规则遮罩,透明区域不操作
- linux 命令大全