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

组合模式计算多项式

代码参考:https://github.com/implement-study/composite_demo

一. 组合模式

在我看来组合模式和装饰器模式的区别是:组合模式肚子里有一大堆同类的对象,而装饰器模式肚子里只有一个同类对象。

二. 类图

在这里插入图片描述

三. 代码分析

1. 中缀表达式转后缀表达式

其核心思想是新建一个操作符栈,遍历中缀表达式,当遇到操作符时,首先判断该操作符的优先级是否高于当前栈顶的操作符的优先级,如果高于,则入栈,否则一直弹出元素加入到中缀表达式中,直至当前栈顶元素的优先级地域该操作符的优先级。
具体而言:

  • 当遇到 ( 时,直接入栈
  • 当遇到 ) 时,弹出元素直到遇到 (
  • 当遇到 +- , 一直弹出高优先级的运算符(+,-,*,\)加入到中缀表达式中,然后压入栈中。
  • 当遇到 */,一直弹出高优先级的运算符(*,\,)加入到中缀表达式中,然后压入栈中。
  • 遇到数字时,直接加入到中缀表达式中。

最后弹出栈中的元素放入到中缀表达式中。
注意:使用java的LinkedList来模拟栈时,统一使用removeLast()和addLast()来模拟,不要混用pop()和push(),这两个操作都是操作LiinkedList的头元素的。

在这里插入图片描述

2. 计算值

得到后缀表达以后,接下来就是新建一个Expression栈,遍历中缀表达式

  • 遇到符号时,从Expression栈中弹出左右元素,然后新建BinaryExpression对象压入栈中
  • 遇到数字时,新建NumberExpression对象压入栈中。

组合模式通过定义统一的接口,将多项式的叶子节点(如常数项、变量项)和组合节点(如加法、乘法表达式)视为同一类对象。方便扩展。(其实到这里为止,并没有完全凸显组合模式的优点,如果再拓展到变量项将会有另一番感受)

在这里插入图片描述

http://www.dtcms.com/a/129016.html

相关文章:

  • 【MYSQL从入门到精通】数据库基础操作、数据类型
  • 数据结构 -- 图的遍历
  • 文件操作和IO - 2
  • Model Context Protocol(MCP)模型上下文协议
  • spark core编程之行动算子、累加器、广播变量
  • 在51单片机上实现平滑呼吸灯:50us定时器PWM实战指南
  • Shell脚本提交Spark任务简单案例
  • Java基础 4.12
  • 《jQuery EasyUI 插件》
  • Linux基础5
  • 【数据结构与算法】ArrayList 和 顺序表
  • Python进阶(3):函数(接上篇)
  • Linux基础8
  • Linux磁盘大师:存储管理完全指南
  • Redis 哨兵模式 搭建
  • PDF 转换为 Word、HTML、LaTeX 和 Markdown 格式
  • TDengine 语言连接器(C/C++)
  • 智能手机功耗测试
  • jxls2.10实现模板导出/单元格合并/自定义标签实现单元格隐藏
  • 为什么ASCII的A是65[特殊字符]
  • NET模式下如何配置虚拟机的IP地址为静态的
  • 在Ubuntu 22.04里使用KVM创建虚拟机Ubuntu 22.04
  • 【源码】Mybatis源码
  • 图片文本识别OCR+DeepSeekapi实现提取图片关键信息
  • Linux权限理解
  • [IEEE TIP 2024](cv即插即用模块分享)IdeNet信息增强模块 性能提升必备!
  • 如何用海伦公式快速判断点在直线的哪一侧
  • MCP(模型上下文协议)简单案例
  • XILINX DDR3专题---(1)IP核时钟框架介绍
  • Python及C++中的列表