c# 四则混合运算算法

中缀表达式转后缀表达式

1.中缀表达式:

是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。

2.后缀表达式:

后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,没有括号)。

3.中缀表达式转后缀表达式:

  1. 开始扫描表达式
  2. 如果是数字,加入后缀表达式
  3. 如果是‘(’,入栈
  4. 如果是‘)’,则依次把栈中的的运算符加入后缀表达式中,直到出现'(‘,从栈中删除'(‘ ;
  5. 如果是除括号外的其他运算符, 当其优先级高于除'(‘以外的栈顶运算符时,直接入栈。否则从栈顶开始,依次弹出比当前处理的运算符优先级高和优先级相等的运算符,直到一个比它优先级低的或者遇到了一个左括号为止。
  6. 当扫描的中缀表达式结束时,栈中的的所有运算符出栈加入到后缀表达式

C#实现字符串转中缀表达式

目标:将字符串转为字符串数组每一个字符串代表一个中缀表达式元素

算法如下:

  1. 创建一个List,用来存储元素,创建一个字符串用来存储数字strNum
  2. 遍历字符串
  3. 如果不是操作符,将当前字符拼接到strNum
  4. 如果是操作符,strNum加入到List,操作符加入到List,strNum置空
  5. 遍历结束后判断strNum是否为空,不为空加入到List

代码实现如下:

C#实现计算中缀表达式

算法:

  1. 创建两个栈,stack1:数字,stack2:操作符
  2. 遍历中缀表达式
  3. 如果是'(‘, 将'(‘加入stack2
  4. 如果是’)’,循环取出操作符盏顶元素,如果不是'(‘,取出stack1的栈顶的两个元素,进行相应的操作运算并将结果加入stack1,如果是'(‘,退出循环
  5. 如果是计算符号,循环获取操作符盏顶元素,如果栈顶有元素且优先级高于当前的计算符号,取出stack1的栈顶的两个元素,进行相应的操作运算并将结果加入stack1,同时将此符号移除栈,否则停止循环,并将当前计算符号加入stack2
  6. 如果是数字加入stack1
  7. 表达式遍历结束后,循环取出操作符盏顶元素,同时取出stack1的栈顶的两个元素进行相应的操作运算并将结果加入stack1,指导盏为空截止。
  8. 最后stack1里只有一个数字就是表达式的结果。

Tip:取出stack1的栈顶的两个元素,第一个为中缀表达式的中符号后面的数字,第二个为中缀表达式的中符号前面面的数字。

代码实现如下:

评论已关闭。

分类目录