题目设计一个程序实现基于二叉树表示的算术表达式的操作Word格式文档下载.docx
- 文档编号:14618115
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:24
- 大小:24.16KB
题目设计一个程序实现基于二叉树表示的算术表达式的操作Word格式文档下载.docx
《题目设计一个程序实现基于二叉树表示的算术表达式的操作Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《题目设计一个程序实现基于二叉树表示的算术表达式的操作Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
3、
测试数据(
附后
)。
提供两种方式的测试:
一种是自动测试,即程序调用
test
文件夹
data.txt
文件里的测试
数据,另一种方式是手动测试,即按程序提示一步一步输入测试。
除了满足要求的
0;
a;
-91;
+a*bc;
+*5^x2*8x;
+++*3^x3*2^x2x6,还有几十组数据测试。
每当输入一个表达式后,程序提示用户赋值,再对表达式求值。
为了方便用户,我在程序
中用数组保存着一些测试数据,以供测试用。
二、概要设计
1.以字符串保存输入的字符序列。
2.提示用户赋值的同时将数据取出建立二叉树。
3.用后根遍历的次序用递归函数对表达式求值,求值时进行相应的转化,将运算数的字符
形式转换成整数形式。
4.用中缀表达式输出表达式时,适当添加括号,以正确反映运算的优先次序。
5.抽象数据类型的定义:
1)、存放表达式的结构类型,是以二叉树为基本原型。
typedef
enum{
OPER,
VAR,
ORD
}ElemTag;
//运算符,变量,常量
struct
ExpNode
{
ElemTag
tag;
//标记
union{
char
expr[4];
//存放运算符名
struct{
var;
//存放变量名
int
val;
//存放变量的值,初始值为
}vary;
//存放变量
ordina;
//存放常量值
};
ExpNode
*lchild,
*rchild;
/*
左右孩子指针
*/
}
*ExpTree;
二叉树的二叉链表存储表示
基本操作:
Random(
intnMin,
intnMax
//返回
nMin
到
nMax
之间的随机数
void
FindVary(
c,
//找出表达式中的变量
Status
ArrayCreateExp(
&
*ch,
i
//从
ch
数组中读取字符串,构造表达式
CreateExp(
;
//Status
InputCreateExp(
E
//从键盘先序输入来构造表达式树
T
Visit(
//输出
的内容
//输出中序表达式用带括号的中缀表示式输出
Assign(
v,
float
c
//对表达式内的所有
v,赋值
c
Value(
//计算表达式的值
Compound(
p,
e1,
e2
//5.构造一个新的复合表达式(E1)P(E2)
Diff(
V
//求表达式
对变量
的导数
MergeConst(
//合并表达式种所有常数运算
PreOrderTraverse(
//波兰式输出
PostOrderTraverse(
//逆波兰式输出
2)、队列
QElemType;
QNode
QElemType
data;
QNode
*next;
}QNode,
*QuePtr;
struct
QuePtr
front;
rear;
}Queue;
InitQueue(
Queue
Q
//构造一个空队列
DestroyQueue(
//销毁队列
QueueEmpty(
//判空
EnQueue(
Q,
//插入元素
为
的新的队尾元素
DeQueue(
//删除队头元素,用
返回其值,并返回
OK,否则返回
ERROR;
3)、栈
SElemType
*base;
*top;
stacksize;
}SqStack;
InitStack(
SqStack
S
StackEmpty(
Push(
S,
Pop(
Top(
6、
主程序:
main()
while
(1)
{接受命令
处理命令;
Switch()
case:
1.以数组形式输入前缀表示式函数构造表达式.
2.以字符序列输入前缀表示式函数构造表达式.
3.实现对变量
的赋值(V=c).
4.对算术表达式
求值.\n"
5.构造一个新的复合表示式(E1)P(E2).
6.求偏导函数
Diff(E,V)
7.对三角函数的测试.
8.常数合并.
0.结束
}
三、详细设计
1、存放表达式的结构类型,是以二叉树为基本原型。
我原来是直接用二叉树的存储结构的,后来发现受到这个结构类型的很大限制,受到
广义表存储结构的启发,就自己设计了这样一个存储类型。
下面分析这个存储结构:
(1)、用
来标记是运算符,变量,常量。
用枚举类型定义
enum{
}ElemTag,可以区分是运算符,变量,常量。
(2)、用字符串
来存放运算符名,我先预定存放三个字符的运算符名
(最后一个
用来存放’\0’),这样运算符不仅可以是'
+'
,
'
-'
*'
,'
/'
^'
,还可以是’
sin’,’cos’,’tan’。
如果觉得三个字符不够,可以扩展。
(3)、struct{char
//存放变量名float
//存放变量的值,初
始为
0}vary;
//存放变量。
这样在变量赋值后,还可以保存着变量名。
可以用作如公
式一样,重复赋值使用。
(4)、使用
来存放常量值。
这样赋值时,就扩大了赋值范围,可以是一个整
形的范围,大大扩大了本程序的使用范围。
但需要在赋值时使用,在输入时,还是得用
0-9,这也是本程序的缺陷,有待改进。
2、队列。
Q
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 题目 设计 一个 程序 实现 基于 二叉 表示 算术 表达式 操作