当前位置: 首页 > news >正文

深圳网站建设提供服务公司阿里巴巴网站建设教程

深圳网站建设提供服务公司,阿里巴巴网站建设教程,wordpress 删除emjo,WordPress用quic协议表达式二叉树节点的数据可能是运算数或运算符#xff0c;可以使用一个联合体进行存储#xff1b;同时还需要一个变量来指示存储的是运算数还是运算符#xff0c;可以采用和栈方法求值中一样的枚举类型TokenType#xff1a; 1 typedef enum2 {3 BEGIN,4 NUMBER,5 …  表达式二叉树节点的数据可能是运算数或运算符可以使用一个联合体进行存储同时还需要一个变量来指示存储的是运算数还是运算符可以采用和栈方法求值中一样的枚举类型TokenType 1 typedef enum2 {3 BEGIN,4 NUMBER,5 OPERATOR,6 LEFT_BRAC,7 RIGHT_BRAC8 } TokenType;9 10 class Token 11 { 12 public: 13 TokenType _type; 14 union 15 { 16 char op; 17 double num; 18 } _data; 19 };   二叉树方法求值的Calculator类公有继承自节点数据数据类型为Token类的BinaryTree类 1 class Calculator : public BinaryTreeToken2 {3 public:4 void parseExpression(string expression) throw(string);5 double calculate();6 7 private:8 stackchar _stkOperators;9 stackBinaryTreeNodeToken * _stkNodes; 10 stackdouble _stkNumbers; 11 12 static int priority(char op); 13 static double calculate(double d1, char op, double d2) throw(string); 14 15 void postOrder(BinaryTreeNodeToken * node); 16 void calculateStack() throw(string); 17 void dealWithNumber(char *pToken) throw(string); 18 void dealWithOperator(char *pToken) throw(string); 19 void dealWithLeftBrac(char *pToken) throw(string); 20 void dealWithRightBrac(char *pToken) throw(string); 21 }; 方法parseExpression()用来将表达式转换为二叉树它需要两个栈一个用来存储运算符一个用来存储指向子树的指针用来存储浮点类型的栈仅在求值时使用。由于parseExpression方法需要访问BinaryTreeNode类的私有成员因此还要在BinaryTreeNode类中声明Calculator类为友元类。   转换过程与栈方法求值的运算压栈过程基本相同当遇到运算数时生成一个新的节点并将它的指针压入节点指针栈中遇到运算符时比较当前运算符和运算符栈栈顶运算符的优先级若运算符栈栈顶运算符的优先级较高则为它生成一个新的节点并从节点指针栈中弹出两个节点指针作为新节点的左子树和右子树随后将这个新节点的指针压入节点指针栈中将当前运算符压入运算符栈中否则只将当前运算符压入运算符栈中。最后反复执行上述过程直至运算符栈为空节点指针栈的栈顶元素即为指向树根节点的指针。表达式“12*3”和“1*23”的转换过程如下图   使用代码描述操作节点指针栈的过程 1 void Calculator::calculateStack() throw(string)2 {3 BinaryTreeNodeToken * node new BinaryTreeNodeToken();4 assert(node);5 node-_data._type OPERATOR;6 node-_data._data.op _stkOperators.top();7 _stkOperators.pop();8 assert(!_stkNodes.empty());9 node-_rightChild _stkNodes.top(); 10 _stkNodes.pop(); 11 assert(!_stkNodes.empty()); 12 node-_leftChild _stkNodes.top(); 13 _stkNodes.pop(); 14 _stkNodes.push(node); 15 }   根据数学规则以及最后清空运算符栈的过程parseExpression()方法实现如下 1 void Calculator::parseExpression(string expression) throw(string)2 {3 destory();4 while (!_stkNodes.empty())5 {6 _stkNodes.pop();7 }8 while (!_stkOperators.empty())9 { 10 _stkOperators.pop(); 11 } 12 TokenType lastToken BEGIN; 13 14 char * pToken expression[0]; 15 while (*pToken) 16 { 17 switch (lastToken) 18 { 19 case BEGIN: 20 if (*pToken () 21 { 22 // an expression begin with a left bracket 23 dealWithLeftBrac(pToken);; 24 lastToken LEFT_BRAC; 25 } 26 else 27 { 28 // or a number 29 dealWithNumber(pToken); 30 lastToken NUMBER; 31 } 32 break; 33 case NUMBER: 34 // after a number 35 if (*pToken )) 36 { 37 // it may be a right bracket 38 dealWithRightBrac(pToken); 39 lastToken RIGHT_BRAC; 40 } 41 else 42 { 43 // it may be an operator 44 dealWithOperator(pToken); 45 lastToken OPERATOR; 46 } 47 break; 48 case OPERATOR: 49 case LEFT_BRAC: 50 // after an operator or a left bracket 51 if (*pToken () 52 { 53 // it may be a left bracket 54 dealWithLeftBrac(pToken); 55 lastToken LEFT_BRAC; 56 } 57 else 58 { 59 // it may be a number 60 dealWithNumber(pToken); 61 lastToken NUMBER; 62 } 63 break; 64 case RIGHT_BRAC: 65 // after a right bracket 66 if (*pToken )) 67 { 68 // it may be another right bracket 69 dealWithRightBrac(pToken); 70 lastToken RIGHT_BRAC; 71 } 72 else 73 { 74 // it may be an perator 75 dealWithOperator(pToken); 76 lastToken OPERATOR; 77 } 78 break; 79 } 80 } 81 82 while (!_stkOperators.empty()) 83 { 84 if (_stkOperators.top() () 85 { 86 throw string(bad token (); 87 } 88 calculateStack(); 89 } 90 91 assert(!_stkNodes.empty()); 92 _root _stkNodes.top(); 93 } 方法实现与栈方法求值的公有方法calculator()基本相同。开始调用的destory()方法继承自BinaryTree类用于释放已占用的二叉树节点空间可以防止程序内存溢出。转载于:https://www.cnblogs.com/lets-blu/p/7289643.html
http://www.zqtcl.cn/news/364990/

相关文章:

  • 文化礼堂建设情况网站网站建设运行
  • 自己做网站很难asp网站开发四酷全书:新闻_论坛_电子商城_博客
  • 网站建设入什么会计科目从网络安全角度考量请写出建设一个大型电影网站规划方案
  • 品牌建设+网站网站建设 淘宝客末班
  • 建设商业网站学校建设门户网站的好处
  • 男女朋友在一起做那个的网站公司建设网站
  • 营销型网站的类型有哪些相册网站怎么做
  • 河南建设监理协会网站电话erp管理系统官网
  • 视频网站seo实战做企业网站一般用什么服务器
  • icp备案 网站负责人免费直播sdk
  • 网站制作和如何推广动画专业学什么
  • 北京一家专门做会所的网站基于ssh框架的网站开发流程
  • 可以在自己的电脑上做网站吗陕西商城网站建设
  • 深圳网站建设工作室郴州有什么好玩的地方
  • 用dw做的网站怎么发到网上竹妃怎么在公众号里做网站
  • 杭州网站优化搜索黑龙江公共资源交易网官网
  • 动易网站 首页模板修改平台网站是什么
  • 营销网站更受用户欢迎的原因是英文网站的建设意义
  • 学网站建设基础河北省建设网站的网站首页
  • 铜仁市住房和城乡建设部网站延边有没有做网站的
  • 如何做ppt的模板下载网站移动端网站的优点
  • 网站域名没有实名认证微信平台开发技术
  • 自己用电脑做虚拟机怎么建网站个人网站 icp 代理
  • 嘉兴网站建设999 999中国建设招标网是私人网站吗
  • 网站程序设置主页面零基础学wordpress pdf下载
  • 网站代码优化有哪些专做立体化的网站
  • 单县网站定制培训机构专业
  • 网站防红链接怎么做网站建设中提示页面
  • 网站开发和游戏开发的区别互联网服务平台投诉
  • 杭州定制网站公司出名的设计网站