C++二叉树应用:计算算术表达式
来源:互联网 发布:软件开发体系结构 编辑:程序博客网 时间:2024/05/22 14:51
本文转自:http://www.duote.com/tech/5/14777.html
#include<iostream>using namespace std;class calc{enum Type{DATA,ADD,SUB,MULTI,DIV,OPAREN,CPAREN,EOL};struct node{Type type;int data;node *lchild,*rchild;node(Type t,int d=0,node*lc=NULL,node *rc=NULL){type=t;data=d;lchild=lc;rchild=rc;}};node *root;node *create(char *&s);Type getToken(char *&s,int &value);int result (node *t);public:calc(char *s){root=create(s);}int result(){if(root==NULL)return 0;return result(root);}};calc::node *calc::create(char *&s){//((2+3*2)-(12-6))/2=1node *p,*root=NULL;Type returnType=DATA;Type flag=DATA;int value;while(*s){flag=returnType;returnType=getToken(s,value);switch(returnType){case DATA:case OPAREN:if(returnType==DATA)p=new node(DATA,value);else p=create(s);if(root==NULL)root=p;else if(root->rchild==NULL)root->rchild=p;else root->rchild->rchild=p;break;case CPAREN:case EOL:return root;case ADD:case SUB:root=new node(returnType,0,root);break;case MULTI:case DIV:if(root->type==DATA||root->type==MULTI||root->type==DIV||flag==OPAREN)root=new node(returnType,0,root);else root->rchild=new node(returnType,0,root->rchild);}}return root;}calc::Type calc::getToken(char *&s,int &data){char type;while(*s==' ')++s;if(*s>='0'&&*s<='9'){data=0;while(*s>='0'&&*s<='9'){data=data*10+*s-'0';++s;}return DATA;}if(*s=='\0')return EOL;type=*s;++s;switch(type){case '+':return ADD;case '-':return SUB;case '*':return MULTI;case '/':return DIV;case '(':return OPAREN;case ')':return CPAREN;default:return EOL;}}int calc::result(node*t){int num1,num2;if(t->type==DATA)return t->data;num1=result(t->lchild);num2=result(t->rchild);switch(t->type){case ADD:t->data=num1+num2;break;case SUB:t->data=num1-num2;break;case MULTI:t->data=num1*num2;break;case DIV:t->data=num1/num2;break;}return t->data;}int main(){char equation[256];cin>>equation;//calc exp("3*(2+(6/2))");calc exp(equation);cout<<exp.result()<<endl;return 0;}
运行结果:输入算术表达式,按Enter键即可。
- C++二叉树应用:计算算术表达式
- 算术表达式构造二叉树; 二叉树计算算术表达式;
- 算术表达式计算C实现
- 算术表达式二叉树表示
- 算术表达式二叉树表示
- 栈的应用 算术表达式的计算
- 算术表达式的计算(栈的应用)
- 算术表达式计算(栈的应用)
- 二叉树应用——计算表达式
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (转载)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 算术表达式的计算
- 算术表达式的计算
- 计算算术表达式
- 后缀表达式计算算术表达式
- 后缀表达式计算算术表达式
- 求解算术表达式结合二叉树的后缀表达式问题
- Ajax
- sql server语句加强2
- 算法知识讲座--山东大学(威海)机信学院副院长贺红教授
- 【排列组合】HNOI
- C#冒泡法对数组进行排序
- C++二叉树应用:计算算术表达式
- 在 x86 上面交叉编译 gstreamer for arm $ MIPS
- Notepad++来运行golang
- 开启82571EB/82572EI Multiple transmit queues
- POJ 1392 欧拉回路
- C#学习之二---创建简单的图形应用程序-WPF
- GNU汇编风格
- 一些电子书资源
- Project Euler problem 51