数据结构与算法分析算术表达式求值计算
数据结构与算法分析
实验三 算术表达式求值计算
要求:创建Form窗体,输入算术表达式,计算出表达式结果。
基本思路:
(1)将表达式串拆分成操作数和操作符混合的字符串数组(可以直接按顺序读出操作数和操作符)
(2)从数组中依此取出一个串,如果是操作数直接放入操作数栈中;如果是操作符(c1),从操作符栈取一个操作符(c2)比较,如果优先级c1>c2,操作符c1直接入栈;
(3)如果c1<=c2,则从操作数栈取2个操作数data1,data2,进行运算,运算结果保存到操作数栈;
(4)重复(2)(3),步骤,最后操作数栈中的结果即为表达式最终的值。
步骤:
- 创建基于.Net的Windows窗体程序,设计表达式输入框,计算按钮,结果显示输入框等;
- 在窗体类中添加数据声明:
添加操作符定义
定义表达式数组(存放操作数和操作符)
添加数据栈和操作符栈
- 双击添加“计算”按钮事件程序,在事件处理程序中完成表达式求值计算;步骤如下:
(1)从输入字符串中得到操作数,存入操作数临时数组dataList
List<string>dataList = new ….
(2)从输入字符串中得到操作符,存入操作符临时数组operList
List<string>dataList = new ….
(3)将操作数和操作符进行重组,存入表达式数组expressList;
(4)逐次输入表达式值,完成表达式计算。
//操作符计算函数DoStatckCalculate()实现
数据结构与算法分析 实验三 算术表达式求值计算 要求:创建Form窗体,输入算术表达式,计算出表达式结果。 基本思路: (1)将表达式串拆分成操作数和操作符混合的字符串数组(可以直接按顺序读出操作数和操作符) (2)从数组中依此取出一个串,如果是操作数直接放入操作数栈中;如果是操作符(c1),从操作符栈取一个操作符(c2)比较,如果优先级c1>c2,操作符c1直接入栈; (3)如果c1<=c2,则从操作数栈取2个操作数data1,data2,进行运算,运算结果保存到操作数栈; (4)重复(2)(3),步骤,最后操作数栈中的结果即为表达式最终的值。 步骤: (1) 创建基于.Net的Windows窗体程序,设计表达式输入框,计算按钮,结果显示输入框等; (2) 在窗体类中添加数据声明: 添加操作符定义 定义表达式数组(存放操作数和操作符) 添加数据栈和操作符栈 (3) 双击添加“计算”按钮事件程序,在事件处理程序中完成表达式求值计算;步骤如下: (1)从输入字符串中得到操作数,存入操作数临时数组dataList List<string>dataList = new …. (2)从输入字符串中得到操作符,存入操作符临时数组operList List<string>dataList = new …. (3)将操作数和操作符进行重组,存入表达式数组expressList; (4)逐次输入表达式值,完成表达式计算。 //操作符计算函数DoStatckCalculate()实现
string input = textBox1.Text;
ExpressionCalculator calculator = new ExpressionCalculator();
try
{
double result = calculator.DoStatckCalculate(input);
textBox2.Text = result.ToString();
Console.WriteLine("Result: " + result);
}
private char[] operChars = new char[] { '+', '-', '*', '/', '=' };
private List<string> expressList = new List<string>();
private Stack<double> dataStack = new Stack<double>();
private Stack<char> operStack = new Stack<char>();
public double DoStatckCalculate(string input)
{
ParseInput(input);
foreach (string ss in expressList)
{
if (IsOperator(ss[0]))
{
DoStackCalculate(ss[0]);
}
else
{
double v1 = double.Parse(ss);
dataStack.Push(v1);
}
}
if (dataStack.Count == 1)
{
return dataStack.Pop();
}
完整代码下载链接https://download.csdn.net/download/qq_28821897/89562835