logo资料库

二叉树的应用-代数表达式实现实验报告.doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
软件技术基础实验五 ----- 二叉树的应用-代数表达式实现 班级:电信 0901 学号:0703090106 姓名:蒋玮珂
实验五 二叉树的应用-代数表达式实现 (1)实验题目: 编写一个程序,用二叉树表示代数表达式,二叉树的每个结点包括一个运算 符或操作数,代数表达式中只包含+、-、*、/和整数且没有错误,要求按照四则 运算法则构造二叉树,然后由对应的二叉树计算对应的表达式的值。 (2)实验目的: 1.掌握二叉树的数据类型描述及特点。 2.掌握二叉树的存储结构(二叉链表)的建立算法。 3.掌握二叉链表上二叉树的基本运算的实现。 (3)调试通过并正确执行给定功能要求的实验代码: #include "stdafx.h" #include #include typedef struct bitree { int data; bitree * lchild; bitree * rchild; }bitree; bitree * createtree(int b[],int i,int j) { bitree * p; int k,plus=0,posi=0; if(i==j) { p=new bitree; p->data=b[i]; p->lchild=p->rchild=NULL; return p; } //i!=j for(k=i;k<=j;k++) { if((b[k]==43)||(b[k]==45)) { plus++; posi=k; } } //没有+或-
if(!plus) for(k=i;k<=j;k++) if((b[k]==42)||(b[k]==47)) { plus++; posi=k; } //还有符号存在递归 if(plus) { p=new bitree; p->data=b[posi]; p->lchild=createtree(b,i,posi-1); p->rchild=createtree(b,posi+1,j); return p; } else return NULL; } double comp(bitree *root) { double v1,v2; if(!root) return 0; if ((!root->lchild)&&(!root->rchild)) return root->data; v1=comp(root->lchild); v2=comp(root->rchild); switch(root->data) { case 43: case 45: case 42: case 47: default:return 0; return v1+v2; return v1-v2; return v1*v2; return v1/v2; } } void DispBTNode(bitree *root) { if(root) { cout<data; if(root->lchild||root->rchild) {
cout<<'('; DispBTNode(root->lchild); cout<<','; DispBTNode(root->rchild); cout<<')'; } } } void main() { char a[100]; int b[100],c=0; int i,j=0,n; bitree * root; double y; ifstream infile("e:\\Program Files\\MSDev98\\MyProjects\\file1.txt"); ifstream ifile("e:\\Program Files\\MSDev98\\MyProjects\\file2.txt"); ofstream outfile("e:\\Program Files\\MSDev98\\MyProjects\\file3.txt"); infile>>n; for(i=0;i>a[i]; } a[i]='\0'; for(i=0;i=48)&&(a[i]<=57)) { if((a[i-1]>=48)&&(a[i-1]<=57)) c=c*10+(a[i]-48); else c=a[i]-48; } else { b[j]=c; j++; b[j]=a[i]; j++; } } }
b[j]=c; j++; b[j]='\0'; for(i=0;i
说明:(1)file1 输入的为代数式的符号个数,一个数字和一个符号都算 1 个 (2)file2 输入的为代数式,式子中不能出现 43 42 45 47 这几个危险数字 (3)file3 为输出的结果,43 为加,45 为减,42 为乘,47 为除
分享到:
收藏