实习报告
题目:
编写一个实现基于二叉树表示的算术表达式
Expression
操作程序
班级:
姓名:
学号:
完成日期
//
一、
需求分析
算术表达式
Expression
内可以含有变量(
a
~
z
)
、常量(
0
~
9
)和二元算术
符(
+,-,*,/,
∧(乘幂)
)
。实现以下操作:
(
1
)
ReadExpr(E)
――以字符序列的形式输入语法正确的前缀表达式并构造
表达式
E
。
(
2
)
WriteExpr(E)
――用带括号的中缀表达式输出表达式
E
。
(
3
)
Assign(V
,
c)
――实现对变量
V
的赋值(
V=c
)
,变量的初值为
0
。
(
4
)
Value(E)
――对算术表达式
E
求值。
(
5
)
CompoundExpr(p,E1,E2)
――构造一个新的复合表达式(
E1
)
p
(
E2
)
。
二、
概要设计
1
、数据类型的声明:
在这个课程设计中,采用了链表二叉树的存储结构,以及两个顺序栈的辅助
存储结构
/*
头文件以及存储结构
*/
#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef int Status;
2
、表达式的抽象数据类型定义
ADT Expression
{
数据对象
D
:
D
是具有数值的常量
C
和没有数值的变量
V
;
数据关系:
R={
或者
C)P(V
或者
C)>|V,C
∈
D,
或者
C)P(V
或者
C)>
表示由运算符
P
结合起来的表达式
E}
基本操作:
Status Input_Expr(&string,flag)
操作结果:
以字符序列的形式输入语法正确的前缀表达式,
保存到字符
串
string
;
参数
flag
表示输出的提示信息是什么,
输入成功返回
OK
,
否则,返回
ERROR
。
void judge_value(&E,&string,i)
初始条件:树
E
存在,表达式的前缀字符串
string
存在;