二叉树表达规定形式的代数表达式并计算表达式结果(无明显缺陷版本)
2010-05-15 13:59
411 查看
题目:编写一个程序,先用二叉树来表示代数表达式,树的每一个结点包括一个运算符或者运算数,代数表达式中只包含加减乘除和一位整数且没有错误,并按先加减后乘除的原则构造二叉树,然后由对应的二叉树计算该表达式的值。
#include <stdio.h> //仔细分析有代表性的实例,发现规律. typedef struct node // 结点类型定义 { float data; bool sign; struct node *lchild; struct node *rchild; }BTNode; BTNode *create(char *str,int n) // 创建代数表达式对应的二叉树 { BTNode *root = NULL; //始终指向当前已经生成的二叉树的根 BTNode *p = NULL; //始终指向当前待处理结点 float ch; int j = 0; ch = str[j]; while(ch != '/0' && j < n) { if(ch == '0' || ch == '1' ||ch == '2' ||ch == '3'||ch == '4' || ch == '5' || ch == '6' || ch == '7' || ch == '8'|| ch == '9') { p = new BTNode; p->data = ch; p->sign = false; if(root == NULL) root = p; else if(root->rchild == NULL) root->rchild = p; else root->rchild->rchild=p; } else if(ch == '+' || ch == '-') { p = new BTNode; p->data = ch; p->sign = true; p->rchild = NULL; p->lchild = root; root = p; root->rchild = NULL; } else if(ch == '*' || ch == '/') { if(root->data >= '0' && root->data <= '9' || root->data == '*' || root->data == '/') { p=new BTNode; p->data = ch; p->sign = true; p->rchild = NULL; p->lchild = root; root = p; } else { p = new BTNode; p->data = ch; p->sign = true; p->lchild = root->rchild; root->rchild = p; p->rchild = NULL; } } j++; ch=str[j]; } return root; } float result(BTNode *b) //计算表达式 { float n1,n2; if(b->sign == false && b->data >= '0' && b->data <= '9') return (b->data - '0'); n1 = result(b->lchild);//计算左子表达式 n2 = result(b->rchild);//计算右子表达式 if (b->sign == true && b->data == '+') b->data = n1 + n2; else if (b->sign == true && b->data == '-') b->data = n1 - n2; else if (b->sign == true && b->data == '*') b->data = n1 * n2; else if (b->sign == true && b->data == '/') b->data = n1 / n2; return b->data; } void main() { while(true) { BTNode static *b=NULL,*q=NULL; char str[100]; printf("请输入符合要求的代数表达式:"); scanf("%s",str); int n=0,i=0; while(str[i++] != '/0') n++; b = create(str,n); printf("该表达式的值为:%f/n", result(b)); } }
相关文章推荐
- 二叉树表达规定形式的代数表达式并计算表达式结果(无明显缺陷版本)
- 二叉树表达规定形式的代数表达式并计算表达式结果(有缺陷版本)
- 二叉树表达规定形式的代数表达式并计算表达式结果
- 表达式的计算结果必须为节点集。
- C#将字符串转换成运算表达式并得到计算结果
- 通过右运算表达试来计算结果
- 中缀表达式转后缀表达式并计算结果
- 数据结构实践——用二叉树求解代数表达式
- 数据结构实践——用二叉树求解代数表达式
- 第十一周 项目二-用二叉树求解代数表达式
- 返回比较表达式比较结果/计算表达式值的函数
- 中缀表达式转后缀表达式并输出计算结果
- 在C#中解决动态计算表达式的问题(如字符串"Sin(1)+Cos(2)",执行并得出结果)
- 第十周 项目 2 - 用二叉树求解代数表达式
- C语言实现二叉树的建立、遍历以及表达式的计算
- 数据结构实现中缀表达式到后缀表达式,再到计算出结果的代码
- 算式类型字符串表达式读取并计算出结果(简单四则运算)--后缀表达式计算
- Shell读取一个表达式并计算其结果
- 利用栈结构计算代数表达式的值
- 二叉树计算四则运算表达式