关于表达是计算在有关栈的文章里写的十分详细了,学到树时!发现表达式计算也是基本树学习的基础知识所以也认认真真的写完了!
这里还是需要栈的只是帮助我将我们人类惯用的表达式转换成后缀表达式。再利用后缀表达式转换为树的形式。
有关思路: 1、先将输入的中缀表达式转换为后缀表达式,存入一个字符数组中。
2、对后缀表达式进行操作: 1)遇到数字,用它生成一颗单结点的树,并压栈;
2)遇到操作符,在栈中弹出两颗树,并将这个操作数的作为根节点分别指向这两颗树,形成一颗新树,并压栈。
要求:可以是大于10的整数,包括小数。
虽然之前已经写过了关于终追表达式转换后缀表达式,我依然老老实实的写了一遍,不过利用了STL,如果再写一遍栈太浪费时间了!
首先是将中缀表达式转换为后缀表达式,思路的第一步:
//利用栈将中缀表达式转换为后缀表达式
void getPostExpr(char *expr)
{
stack<char> theStack;
int i=0;
char ch;
char temp;
cout<<"请输出正确的中缀表达式,以‘#’表示结束输入:"<<endl;
cin>>ch;
while (ch != '#') //结束条件
{
if (isdigit(ch) || ch == '.') //数字小数点直接存入结果数组中
{
while (isdigi