算术表达式与二叉树课程设计
数据结构课程设计:算术表达式

数据结构课程设计:算术表达式表达式求值⼀⽬的利⽤《数据结构》课程的相关知识完成⼀个具有⼀定难度的综合设计题⽬,利⽤C/C++语⾔进⾏程序设计,并规地完成课程设计报告。
通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决⽅法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提⾼利⽤计算机分析解决综合性实际问题的基本能⼒。
设计⼀个程序,演⽰以字符序列的形式输⼊不含变量的实数表达式求值的计算结果⼆需求分析设计⼀个程序,演⽰以字符序列的形式输⼊不含变量的实数表达式求值的计算结果。
对于这个程序我们从输⼊,输出,和功能三⽅⾯来分析。
1.程序输⼊:从键盘上输⼊表达式,⼀个算术表达式,由常量、运算符和括号组成(以字符串形式输⼊,不含变量)。
为了简化,操作数只能为浮点数,操作符为“ +”、“-”、“*”、“/”、“(”、“)”,⽤“#“表⽰结束。
2.程序输出:表达式运算结果,运算符栈、运算数栈、输⼊字符和主要操作变化过程,如运算符栈、运算数栈的出⼊记录,字符出⼊栈的过程,打印出完整的过程。
3.功能要求及说明:从键盘上输⼊表达式。
分析该表达式是否合法(包含分母不能为零的情况):(1)是数字,则判断该数字的合法性。
(2)是规定的运算符,则根据规则进⾏处理。
在处理过程中,将计算该表达式的值。
(3)若是其它字符,则返回错误信息。
若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。
三概要设计1.数据结构的选择:任何⼀个表达式都是由操作符,运算符和界限符组成的。
我们分别⽤顺序栈来寄存表达式的操作数和运算符。
栈是限定于紧仅在表尾进⾏插⼊或删除操作的线性表。
为了实现算符优先算法,可以使⽤两个⼯作栈。
⼀个称做SqStack1,⽤以寄存运算符;另⼀个称做SqStack2,⽤以寄存操作数或运算结果。
⾸先置操作数栈为空栈,表达式起始符“#”作为运算符栈的栈底元素,然后依次读⼊表达式的每个字符,若是操作数则进⼊SqStack2栈,若是运算符则和SqStack1栈的栈顶运算符⽐较优先权后做相应操作,直⾄整个表达式求值完毕。
C语言实现一.二叉树操作 二.用栈实现算术表达式求值 课设报告

沈阳理工大学课程设计专用纸
No. 1
题目 一.二叉树操作(1)二.算术表达式求
一、课程设计的目的
本学期我们对《数据结构》这门课程进行了学习。这门课程是一门实践性非常强的 课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设 计实习。这次课程设计不但要求学生掌握《数据结构》中的各方面知识,还要求学生具 备一定的 C 语言基础和编程能力。
{ int k; char *temp; if(len<=0) { *T=NULL;
沈阳理工大学
沈阳理工大学课程设计专用纸
No. 5
return; } *T=(BitNode*)malloc(sizeof(BitNode)); (*T)->data=*pre; for(temp=in;temp<in+len;temp++)
int h,lh,rh; if(T==NULL)
h=0; else {
lh=Depth(T->lchild); rh=Depth(T->rchild); if(lh>=rh)
h=lh+1; else
h=rh+1; } return h; }
沈阳理工大学
沈阳理工大学课程设计专用纸
No. 6
4、运行结果 先输入一棵树的先序遍历序列和中序遍历序列,然后构造出这颗二叉树,并输
(2)题目二的内容和要求: 1、算术表达式由操作数、运算符和界限符组成。操作数是正整数,运算符为 加减乘除,界限符有左右括号和表达式起始 2、将一个表达式的中缀形式转化为相应的后缀形式 3、依据后缀表达式计算表达式的值
沈阳理工大学
沈阳理工大学课程设计专用纸
算术表达式与二叉树课程设计

山西大学课程设计任务书设计题目算术表达式与二叉树所属课程:数据结构系别软件学院专业软件工程班级软工1408班姓名霍志斌指导教师李雪梅设计任务下达日期 2015年 12 月15 日设计时间2016年1月4日至 2016年1月8日目录:一、需求分析二、概要设计1、数据类型的声明:2、表达式的抽象数据类型定义3、整体设计三、详细设计1、二叉树的存储类型2、顺序栈的存储类型3、表达式的基本操作4、主程序和其他伪码算法5、函数的调用关系四、设计和调试分析五、测试六、课程设计的心得和心得以及问题一、需求分析【课程设计要求】【问题的描述】一个表达式和一棵二叉树之间,存在着自然的对应关系。
写一个程序,实现基于二叉树表示的算术表达式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)分别输入0;a;-91;+a*bc;+*5x2*8x;+++*3^*2^x2x6并输出。
2)每当输入一个表达式后,对其中的变量赋值,然后对表达式求值。
二、概要设计1、数据类型的声明:在这个课程设计中,采用了链表二叉树的存储结构,以及两个顺序栈的辅助存储结构/*头文件以及存储结构*/#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<string.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW 0typedef int Status;2、表达式的抽象数据类型定义ADT Expression{数据对象D:D是具有数值的常量C和没有数值的变量V;数据关系:R={<(V或者C)P(V或者C)>|V,C∈D, <(V或者C)P(V或者C)>表示由运算符P结合起来的表达式E}基本操作:Status Input_Expr(&string,flag)操作结果:以字符序列的形式输入语法正确的前缀表达式,保存到字符串string;参数flag表示输出的提示信息是什么,输入成功返回OK,否则,返回ERROR。
二叉树课程设计报告

一、设计目标二叉树是形象地说既树中每个节点最多只有两个分支,它是一中重要的数据类型。
可以运用于建立家谱,公司所有的员工的职位图,以及各种事物的分类和各种机构的职位图表。
二叉树是通过建立一个链式存储结构,达到能够实现前序遍历,中序遍历,后序遍历。
以及能够从输入的数据中得知二叉树的叶子结点的个数,二叉树的深度。
在此,二叉树的每一个结点中必须包括:值域,左指针域,右指针域。
二、总体设计1.对程序中定义的核心数据结构及对其说明:typedef struct BiTNode{//创建二叉树char data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;在开头定义了二叉树的链式存储结构,此处采用了每个结点中设置三个域,即值域,左指针域和右指针域。
2.模块的划分及其功能:本程序分为:7大模块。
二叉树的建立链式存储结构、前序遍历、求叶子结点的个数计算、中序遍历、后序遍历、深度、主函数。
1、二叉树的建立链式存储结构;首先typedef struct BiTNode:定义二叉树的链式存储结构,此处采用了每个结点中设置三个域,即值域,*lchild:左指针域和rchild:右指针域。
2、二叉树的前序遍历;利用二叉链表作为存储结构的前序遍历:先访问根结点,再依次访问左右子树。
3、二叉树的求叶子结点的个数计算;先分别求得左右子树中各叶子结点的个数,再计算出两者之和即为二叉树的叶子结点数。
4、二叉树的中序遍历;利用二叉链表作为存储结构的中序遍历:先访问左子数,再访问根结点,最后访问右子树。
5、二叉树的后序遍历;利用二叉链表作为存储结构的前序遍历:先访问左右子树,再访问根结点。
6、求二叉树的深度:首先判断二叉树是否为空,若为空则此二叉树的深度为0。
否则,就先别求出左右子树的深度并进行比较,取较大的+1就为二叉树的深度。
7、主函数。
核心算法的设计:二叉树是n个节点的有穷个集合,它或者是空集(n=0),或者同时满足以下两个条件:(1):有且仅有一个称为根的节点;(2):其余节点分为两个互不相交的集合T1,T2,并且T1,T2都是二叉树,分别称为根的左子树和右子树。
二叉树教案

二叉树教案一、教学目标:1.了解二叉树的定义和性质。
2.学会二叉树的遍历算法(前序遍历、中序遍历、后序遍历)。
3.掌握二叉树的基本操作(创建二叉树、插入节点、删除节点)。
二、教学重点和难点:1.二叉树的定义和性质。
2.二叉树的遍历算法。
3.二叉树的基本操作。
三、教学准备:1.教师准备:PPT、计算机、投影仪。
2.学生准备:课前预习、纸笔。
四、教学过程:Step 1 导入新课教师通过提问的方式,引导学生回顾树的基本概念,并激发学生对二叉树的兴趣。
Step 2 二叉树的定义和性质教师给出二叉树的定义,并带领学生讨论二叉树的性质(每个节点最多有两个子节点,左子树和右子树)。
Step 3 二叉树的遍历算法1.前序遍历:先访问根节点,然后递归遍历左子树,再递归遍历右子树。
2.中序遍历:先递归遍历左子树,然后访问根节点,再递归遍历右子树。
3.后序遍历:先递归遍历左子树,然后递归遍历右子树,最后访问根节点。
Step 4 二叉树的基本操作1.创建二叉树:教师通过示例向学生展示二叉树的创建过程。
2.插入节点:教师通过示例向学生展示如何插入节点,并解释插入节点的规则。
3.删除节点:教师通过示例向学生展示如何删除节点,并解释删除节点的规则。
Step 5 练习与拓展1.教师设计练习题,让学生运用所学知识进行练习。
2.鼓励学生拓展二叉树的其他应用领域,并进行讨论。
五、教学反思本节课通过讲解二叉树的定义和性质,以及二叉树的遍历算法和基本操作,使学生对二叉树有了基本的了解和掌握。
通过练习和拓展,巩固了学生的学习成果,并培养了学生的分析和解决问题的能力。
但是,由于时间有限,学生的实际操作机会较少,可以在课后布置相关的作业,加深学生的理解和应用能力。
基于二叉树的算术表达式计算与实现

&x ) Is ) {
it p s = 0z n o l B N T o d e { 1c h ild =
gt o et+x l ps) e d(r is , O1; N s ) B N e* o T O r t= gt oe t ps, d o e d (r ol N s+ I s) x 1; )
d t SrCU ,t r r e o sl i s f r c n et g aa tU tr e e h e ae sl m o t n o ov r i d uo n
a i me i e pes n t b a y t e . T i p p r d c s s r h t x rs 0 i re t c  ̄ n r h a e i us s s e
/^\ \
() +2 -)4 b 5 ( 32
igtr ryro- ot f e i i ( t > pr ( P ot o ) > gtr fyn e > pr e ii (o - ot) P ot d ) {
n o d e — — >lhl =r o ; c id o t n o d e — —
{ p s+ 1 o = ;
基于二叉树的算术表达 式计算 与实现
E a u to f a i me i e p e so a e n b n r r e v l a in o r h t t c x r s i n b s d o i a y te
r u n NU L e r L ; t } eefc= \ ’ IUT NU L l ( =’0)  ̄ I L ; s h L I
/^ \
1 + 1 1
/\
r5 i 女
w i( oe gt oe t ps ,I1 hl(d = e d (r olp S en N s+ 3 ) ) ) {
数据结构实验二叉树

实验六:二叉树及其应用一、实验目的树是数据结构中应用极为广泛的非线性结构,本单元的实验达到熟悉二叉树的存储结构的特性,以及如何应用树结构解决具体问题。
二、问题描述首先,掌握二叉树的各种存储结构和熟悉对二叉树的基本操作。
其次,以二叉树表示算术表达式的基础上,设计一个十进制的四则运算的计算器。
如算术表达式:a+b*(c-d)-e/f三、实验要求如果利用完全二叉树的性质和二叉链表结构建立一棵二叉树,分别计算统计叶子结点的个数。
求二叉树的深度。
十进制的四则运算的计算器可以接收用户来自键盘的输入。
由输入的表达式字符串动态生成算术表达式所对应的二叉树。
自动完成求值运算和输出结果。
四、实验环境PC微机DOS操作系统或Windows 操作系统Turbo C 程序集成环境或Visual C++ 程序集成环境五、实验步骤1、根据二叉树的各种存储结构建立二叉树;2、设计求叶子结点个数算法和树的深度算法;3、根据表达式建立相应的二叉树,生成表达式树的模块;4、根据表达式树,求出表达式值,生成求值模块;5、程序运行效果,测试数据分析算法。
六、测试数据1、输入数据:2.2*(3.1+1.20)-7.5/3正确结果:6.962、输入数据:(1+2)*3+(5+6*7);正确输出:56七、表达式求值由于表达式求值算法较为复杂,所以单独列出来加以分析:1、主要思路:由于操作数是任意的实数,所以必须将原始的中缀表达式中的操作数、操作符以及括号分解出来,并以字符串的形式保存;然后再将其转换为后缀表达式的顺序,后缀表达式可以很容易地利用堆栈计算出表达式的值。
例如有如下的中缀表达式:a+b-c转换成后缀表达式为:ab+c-然后分别按从左到右放入栈中,如果碰到操作符就从栈中弹出两个操作数进行运算,最后再将运算结果放入栈中,依次进行直到表达式结束。
如上述的后缀表达式先将a 和b 放入栈中,然后碰到操作符“+”,则从栈中弹出a 和b 进行a+b 的运算,并将其结果d(假设为d)放入栈中,然后再将c 放入栈中,最后是操作符“-”,所以再弹出d和c 进行d-c 运算,并将其结果再次放入栈中,此时表达式结束,则栈中的元素值就是该表达式最后的运算结果。
二叉排序树课程设计

二叉排序树课程设计一、课程目标知识目标:1. 学生能够理解二叉排序树的基本概念和性质,掌握其结构特点和应用场景。
2. 学生能够掌握二叉排序树的插入、删除和查找操作,并了解其时间复杂度。
3. 学生能够理解二叉排序树与其他排序算法的关系,了解其在排序中的应用。
技能目标:1. 学生能够运用所学知识,独立构建二叉排序树,并实现插入、删除和查找功能。
2. 学生能够分析二叉排序树的性能,对其进行优化,提高排序效率。
3. 学生能够运用二叉排序树解决实际问题,如数据排序、查找等。
情感态度价值观目标:1. 学生通过学习二叉排序树,培养对数据结构和算法的兴趣,提高解决问题的能力。
2. 学生在学习过程中,学会合作、交流,培养团队精神和共享意识。
3. 学生能够认识到二叉排序树在实际应用中的价值,激发对计算机科学的热爱。
本课程针对高中年级学生,课程性质为理论与实践相结合。
在教学过程中,注重启发式教学,引导学生主动探究、实践。
根据学生特点和教学要求,课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。
课程目标的分解为具体的学习成果,为后续的教学设计和评估提供依据。
二、教学内容1. 引入二叉排序树的概念,讲解其定义、性质和基本操作。
- 理解二叉树的基础知识,回顾二叉树的遍历方法。
- 介绍二叉排序树的定义,阐述其特点及应用场景。
- 分析二叉排序树的性质,如二叉排序树的中序遍历结果为有序序列。
2. 探讨二叉排序树的构建、插入、删除和查找操作。
- 讲解二叉排序树的构建方法,学会从无序数据建立二叉排序树。
- 分析插入、删除和查找操作的步骤,理解它们的时间复杂度。
- 举例说明如何利用二叉排序树实现数据排序和查找。
3. 分析二叉排序树的性能及优化方法。
- 探讨二叉排序树的高度、平衡因子等性能指标。
- 介绍常见的优化方法,如平衡二叉树(AVL树)和红黑树。
4. 实践环节:二叉排序树的应用。
- 设计实践题目,让学生动手实现二叉排序树的基本操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
山西大学课程设计任务书设计题目算术表达式与二叉树所属课程:数据结构系别软件学院专业软件工程班级软工1408班姓名霍志斌指导教师李雪梅设计任务下达日期 2015年 12 月15 日设计时间2016年1月4日至 2016年1月8日目录:一、需求分析二、概要设计1、数据类型的声明:2、表达式的抽象数据类型定义3、整体设计三、详细设计1、二叉树的存储类型2、顺序栈的存储类型3、表达式的基本操作4、主程序和其他伪码算法5、函数的调用关系四、设计和调试分析五、测试六、课程设计的心得和心得以及问题一、需求分析【课程设计要求】【问题的描述】一个表达式和一棵二叉树之间,存在着自然的对应关系。
写一个程序,实现基于二叉树表示的算术表达式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)分别输入0;a;-91;+a*bc;+*5x2*8x;+++*3^*2^x2x6并输出。
2)每当输入一个表达式后,对其中的变量赋值,然后对表达式求值。
二、概要设计1、数据类型的声明:在这个课程设计中,采用了链表二叉树的存储结构,以及两个顺序栈的辅助存储结构/*头文件以及存储结构*/#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<string.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW 0typedef int Status;2、表达式的抽象数据类型定义ADT Expression{数据对象D:D是具有数值的常量C和没有数值的变量V;数据关系:R={<(V或者C)P(V或者C)>|V,C∈D, <(V或者C)P(V或者C)>表示由运算符P结合起来的表达式E}基本操作:Status Input_Expr(&string,flag)操作结果:以字符序列的形式输入语法正确的前缀表达式,保存到字符串string;参数flag表示输出的提示信息是什么,输入成功返回OK,否则,返回ERROR。
void judge_value(&E,&string,i)初始条件:树E存在,表达式的前缀字符串string存在;操作结果:判断字符string[i],如果是'0'-'9'常量之间,二叉树结点E存为整型;否则,存为字符型。
Status ReadExpr(&E,&exprstring)初始条件:表达式的前缀形式字符串exprstring存在;操作结果:以正确的前缀表示式exprstring并构造表达式E,构造成功,返回OK,否则返回ERROR。
Status Pri_Compare(c1,c2)初始条件:c1和c2是字符;操作结果:如果两个字符是运算符,比较两个运算符的优先级,c1比c2优先,返回OK,否则返回ERROR。
void WriteExpr(&E)初始条件:表达式E存在;操作条件:用带括弧的中缀表达式输入表达式E。
void Assign(&E,V,c,&flag)初始条件:表达式E存在,flag为标志是否有赋值过;操作结果:实现对表达式E中的所有变量V的赋值(V=c)。
long Operate(opr1,opr,opr2)初始条件:操作数opr1和操作数opr2以及操作运算符opr;操作结果:运算符运算求值,参数opr1,opr2为常量,opr为运算符,根据不同的运算符,实现不同的运算,返回运算结果。
Status Check(E)初始条件:表达式E存在;操作结果:检查表达式E是否还存在没有赋值的变量,以便求算数表达式E的值。
long Value(E)初始条件:表达式E存在;操作结果:对算术表达式求值,返回求到的结果。
void CompoundExpr(P,&E1,E2)初始条件:表达式E1和E2存在;操作条件:构造一个新的复合表达式(E1)P(E2)。
Status Read_Inorder_Expr(&string,&pre_expr)操作结果:以表达式的原书写形式输入,表达式的原书写形式字符串string变为字符串pre_expr,后调用reversal_string()函数反转得到前缀表达式pre_expr。
得到正确的前缀表达式返回OK,否则,返回ERROR。
void MergeConst(&E)操作结果:常数合并操作,合并表达式E中所有常数运算。
}ADT Expression3、整体设计在这个课程设计中,有两个源代码文件:expression.h和expression.c。
在expression.h文件中,包含了各个存储结构的声明和辅助存储结构的两个栈的基本操作;在expression.c文件中,是实现课程设计要求的各个函数。
《一》expression.h文件的整体结构1、各个存储结构的声明;2、两个除了栈名和栈存储的元素不一样的顺序栈的基本操作。
其基本操作如下:对于栈SqStack:Status InitStack(SqStack *S) /* 构造一个空栈S */Status StackEmpty(SqStack S) /* 若栈S为空栈,则返回TRUE,否则返回FALSE */ Status Push(SqStack *S,SElemType e) /* 插入元素e为新的栈顶元素 */Status Pop(SqStack *S,SElemType *e) /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */Status GetTop(SqStack S,SElemType *e) /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */对于栈SqStack1:Status InitStack1(SqStack1 *S) /* 构造一个空栈S */Status StackEmpty1(SqStack1 S) /* 若栈S为空栈,则返回TRUE,否则返回FALSE */ Status Push1(SqStack1 *S,SElemType1 e) /* 插入元素e为新的栈顶元素 */Status Pop1(SqStack1 *S,SElemType1 *e) /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */Status GetTop1(SqStack1 S,SElemType1 *e) /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */顺序栈的基本操作的算法见程序清单。
《二》expression.c文件的整体结构1、主程序模块的整体流程可以从主菜单函数可以明了的了解的程序的整体流程,主菜单函数menu()如下:char menu(){char choice;printf("\n****************************************");printf("\n 1 >>>输入正确的前缀表达式");printf("\n 2 >>>带括弧的中缀表示式输出");printf("\n 3 >>>对变量进行赋值");printf("\n 4 >>>对算数表达式求值");printf("\n 5 >>>构造一个新的复合表达式");printf("\n 6 >>>以表达式的原书写形式输入");printf("\n 7 >>>合并表达式中所有常数运算");printf("\n 0 >>>退出");printf("\n****************************************");printf("\n请输入你的选择>>>>>");choice=getche();return choice;}在主函数中,采用多分支程序设计语句switch()使程序产生不同的流向,从而达到实现课程设计的各个要求。
void main(){while(1){清屏;switch(主菜单){根据不同的选择,调用不同的操作函数,完成各个操作;}}}2、本程序有四个模块,主程序模块,二叉树模块,两个顺序栈模块。
四者的调用关系如下:主程序模块中的对于表达式的存储结构调用了二叉树模块,而在构造表达式的二叉树模块中又调用了顺序栈SqStack模块,主程序中在将原表达式形式输入表达式转换为前缀表达式操作中调用了顺序栈SqStack1模块。
三、详细设计1、二叉树的存储类型/*二叉树结点类型*/typedef enum{INT,CHAR}ElemTag;/*INT为整型数据num,CHAR为字符型数据c*/ typedef struct TElemType{ElemTag tag;/*{INT,CHAR}指示是整型还是字符型*/union{int num;/*tag=INT时,为整型*/char c;/*tag=CHAR时,为字符型*/};} TElemType;/*二叉树的二叉链表存储表示 */typedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild; /* 左右孩子指针 */}BiTNode,*BiTree;二叉树的基本操作已经在构造表达式和表达式中的基本操作中根据不同的功能和实际情况修改了,详细见各个函数操作的算法设计。
2、顺序栈的存储类型/*栈的顺序存储表示 */#define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */#define STACKINCREMENT 2 /* 存储空间分配增量 *//*两个顺序栈*/typedef struct SqStack{SElemType *base; /* 在栈构造之前和销毁之后,base的值为NULL */SElemType *top; /* 栈顶指针 */int stacksize; /* 当前已分配的存储空间,以元素为单位 */}SqStack; /* 顺序栈SqStack */typedef struct SqStack1{SElemType1 *base; /* 在栈构造之前和销毁之后,base的值为NULL */SElemType1 *top; /* 栈顶指针 */int stacksize; /* 当前已分配的存储空间,以元素为单位 */}SqStack1; /* 顺序栈SqStack1 */相关的基本操作见上面的“expression.h文件的整体结构”的说明,详细的算法设计见附录的程序清单。