C#数学表示法(后缀表示法)详解
什么是后缀表示法
后缀表示法(Reverse Polish notation,RPN),也叫逆波兰表示法(英语:Reverse Polish notation,缩写 RPN),是一种根据运算符的位置来确定运算顺序的数学表示法。与中缀表达式、前缀表达式等表达式一样,它也是一种通用的表示数值和运算符的方法,可用于计算、编程、数据结构等领域。
后缀表示法的示例
下面是一个使用后缀表示法计算表达式的示例:
表达式:3+4*(5-2)
后缀表示法转换流程:
将中缀表达式转换为后缀表达式:
转换过程 | 运算符栈 | 后缀表达式 |
---|---|---|
3 进入后缀表达式 | 空 | 3 |
+ 进入运算符栈 | + | 3 |
4 进入后缀表达式 | + | 3 4 |
* 进入运算符栈 | + * | 3 4 |
(、5、-、2 依次入栈 | + - * ( | 3 4 5 2 - * |
) 弹出运算符栈 | + * | 3 4 5 2 - * + |
计算后缀表达式:3 4 5 2 - * +
先计算5-2,得到3,则后缀表达式变为:3 4 3 * +
再计算4*3,得到12,则后缀表达式变为:3 12 +
最后计算3+12,结果为15。
所以表达式3+4*(5-2)的结果为15。
C#中的后缀表示法
在C#中,后缀表示法通常用于编写数学公式计算程序。下面是一个使用后缀表示法计算表达式的示例:
using System;
using System.Collections.Generic;
namespace RPN
{
class Program
{
static void Main(string[] args)
{
Stack<double> stack = new Stack<double>();
string[] tokens = { "3", "4", "5", "2", "-", "*", "+" };
foreach (string token in tokens)
{
double num;
if (Double.TryParse(token, out num))
{
stack.Push(num);
}
else
{
double op2 = stack.Pop();
double op1 = stack.Pop();
switch (token)
{
case "+":
stack.Push(op1 + op2);
break;
case "-":
stack.Push(op1 - op2);
break;
case "*":
stack.Push(op1 * op2);
break;
case "/":
stack.Push(op1 / op2);
break;
}
}
}
Console.WriteLine(stack.Pop());
}
}
}
这个程序可以计算后缀表达式3 4 5 2 - * + 的值,并输出结果15。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#数学表示法(后缀表示法)详解 - Python技术站