代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
二叉树计算表达式
作者:
chinaxlt
/ 发布于
2013/11/28
/
632
#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) { node *p, *root=NULL; Type returnType,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 expression[256]; cin>>expression; calc exp(expression); cout<<exp.result()<<endl; return 0; }
试试其它关键字
二叉树
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
chinaxlt
贡献的其它代码
(
1
)
.
二叉树计算表达式
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3