北理工自动化数据结构实验报告3
北理工数据结构实验 排序

本科实验报告实验名称:排序一、实验目的2、通过编程、上机调试,进一步理解排序的方法。
3、具体尝试插入排序、快速排序、选择排序的操作步骤。
4、锻炼动手编程,独立思考的能力。
二、实验题目排序输入10个数,从插入排序、快速排序、选择排序三类算法中各选一种编程实现三、实验基础知识插入排序、快速排序、选择排序三类算法的基本思想四、实验设计方法1、概要设计(1)、插入排序(此次使用直接插入排序)void InsertionSort ( SqList &L ){ // 对顺序表L 作直接插入排序。
for ( i=2; i<=L.length; ++i )if (L.r[i].key < L.r[i-1].key){L.r[0] = L.r[i]; // 复制为监视哨for ( j=i-1; L.r[0].key < L.r[j].key; -- j )L.r[j+1] = L.r[j]; // 记录后移L.r[j+1] = L.r[0]; // 插入到正确位置}} // InsertSort(2)、快速排序(此次用的是起泡排序)V oid Bubblesort(elem R[],int n){I=n;While(i>1){lastExchangeIndex = 1;for(j=1;j<i;j++)if(R[j+1].key<R[j].key){swap(R[j],R[j+1]);lastExchangeIndex =j; //记下进行交换的记录位置}I=lastExchangeIndex ; //本趟进行过交换的最后一个记录的位置}//Bubblesort(3)、选择排序V oid selectsort(elem r[],int n){//对记录序列r[1..n]作简单选择排序。
for(i=1;i<n;++i){//选择第i小的记录,并交换到位j=selectminkey(r,i);//zai r[i..n]中选择关键字最小的记录if(i!=j) R[i] R[j];//与第i个记录交换}}//selectsort五、实验结果及数据分析数据为3 2 4 1 5 0 6 9 8 7的十个数的三种排序方法1、插入排序2、快速排序3、选择排序六、总结此次编程实验,较前几次而言稍微简单一点,并且以前用过起泡排序法,所以对排序方面比较熟悉,但是也遇到了一些问题,例如数组下标问题没处理好,让我在编程实践中花费了大量时间检查。
数据结构实验报告实验总结

数据结构实验报告实验总结本次数据结构实验主要涉及线性表、栈和队列的基本操作以及链表的应用。
通过实验,我对这些数据结构的特点、操作和应用有了更深入的了解。
下面对每一部分实验进行总结。
实验一:线性表的基本操作线性表是一种常见的数据结构,本实验要求实现线性表的基本操作,包括插入、删除、查找、遍历等。
在实验过程中,我对线性表的结构和实现方式有了更清晰的认识,掌握了用数组和链表两种方式实现线性表的方法。
实验二:栈的应用栈是一种后进先出(LIFO)的数据结构,本实验要求利用栈实现简单的括号匹配和后缀表达式计算。
通过实验,我了解到栈可以方便地实现对于括号的匹配和后缀表达式的计算,有效地解决了对应的问题。
实验三:队列的应用队列是一种先进先出(FIFO)的数据结构,本实验要求利用队列实现银行排队和迷宫求解。
通过实验,我对队列的应用有了更加深入的了解,了解到队列可以解决需要按顺序处理的问题,如排队和迷宫求解等。
实验四:链表的应用链表是一种常用的数据结构,本实验要求利用链表实现学生信息管理系统。
通过实验,我对链表的应用有了更深入的了解,了解到链表可以方便地实现对于数据的插入、删除和修改等操作,并且可以动态地调整链表的长度,适应不同的需求。
通过本次实验,我掌握了线性表、栈、队列和链表的基本操作,并了解了它们的特点和应用方式。
同时,通过实际编程的过程,我对于数据结构的实现方式和效果有了更直观的认识,也锻炼了自己的编程能力和解决问题的能力。
在实验过程中,我遇到了一些问题,如程序逻辑错误和内存泄漏等,但通过调试和修改,最终成功解决了这些问题,对自己的能力也有了更多的信心。
通过本次实验,我深刻体会到了理论与实践的结合的重要性,也对于数据结构这门课程有了更加深入的理解。
总之,本次数据结构实验给予了我很多有益的启发和收获,对于数据结构的概念、特点和应用有了更深入的理解。
在以后的学习中,我会继续加强对数据结构的学习和研究,不断提高自己的编程能力和解决问题的能力。
数据结构实验三实验报告

数据结构实验三实验报告数据结构实验三实验报告一、实验目的本次实验的目的是通过实践掌握树的基本操作和应用。
具体来说,我们需要实现一个树的数据结构,并对其进行插入、删除、查找等操作,同时还需要实现树的遍历算法,包括先序、中序和后序遍历。
二、实验原理树是一种非线性的数据结构,由结点和边组成。
树的每个结点都可以有多个子结点,但是每个结点只有一个父结点,除了根结点外。
树的基本操作包括插入、删除和查找。
在本次实验中,我们采用二叉树作为实现树的数据结构。
二叉树是一种特殊的树,每个结点最多只有两个子结点。
根据二叉树的特点,我们可以使用递归的方式实现树的插入、删除和查找操作。
三、实验过程1. 实现树的数据结构首先,我们需要定义树的结点类,包括结点值、左子结点和右子结点。
然后,我们可以定义树的类,包括根结点和相应的操作方法,如插入、删除和查找。
2. 实现插入操作插入操作是将一个新的结点添加到树中的过程。
我们可以通过递归的方式实现插入操作。
具体来说,如果要插入的值小于当前结点的值,则将其插入到左子树中;如果要插入的值大于当前结点的值,则将其插入到右子树中。
如果当前结点为空,则将新的结点作为当前结点。
3. 实现删除操作删除操作是将指定的结点从树中移除的过程。
我们同样可以通过递归的方式实现删除操作。
具体来说,如果要删除的值小于当前结点的值,则在左子树中继续查找;如果要删除的值大于当前结点的值,则在右子树中继续查找。
如果要删除的值等于当前结点的值,则有三种情况:- 当前结点没有子结点:直接将当前结点置为空。
- 当前结点只有一个子结点:将当前结点的子结点替代当前结点。
- 当前结点有两个子结点:找到当前结点右子树中的最小值,将其替代当前结点,并在右子树中删除该最小值。
4. 实现查找操作查找操作是在树中寻找指定值的过程。
同样可以通过递归的方式实现查找操作。
具体来说,如果要查找的值小于当前结点的值,则在左子树中继续查找;如果要查找的值大于当前结点的值,则在右子树中继续查找。
北理工自动化实习报告

实习报告在小学期的最后一周,我们进行了为期5天的实习。
其中有4天都是在北京福田汽车厂旗下的欧辉客车制造厂,最后一天前往了SMC(中国)有限公司和北京华德有限公司进行了参观学习。
虽然只有短短5天,但是我们却学到和见识到了书本上没有的知识。
书本偏向理论,而我们能见到的则是运用于实际当中的技术。
实习第一天,我们早上8点从学校出发,前往欧辉客车制造厂。
因为是星期一所以北京的三环路相当堵车,我们到达汽车厂的时候就已经9点过,然后排列整齐的去到该厂的食堂展开了第一天的学习。
大部分同学都是第一次进入到工厂里面,第一天的时候,工厂里的老师并未进行过多的针对该厂的介绍,而是讲了每一个工厂最重要对的一个问题——安全问题。
用过去发生的真实的安全事故,大到国家领导人提出问责制的,小到自己厂里的,一一认真的讲解。
同时还告诉我们在厂里面工作需要遵从很多原则以及培养各种能力。
比如老师给我们讲的“四不放过原则”:不放过事故原因;不放过事故责任者;不放过对群众的教育;不放过事故后期处理的落实。
“四不伤害原则”:不伤害自己;不伤害他人;保护自己不被他人伤害;保护他人不被他人伤害。
培养“三种能力”:检查消除火灾隐患的能力;组织逃生对的能力;培训教育提高的能力。
检查消除火灾隐患能够有效的防止火灾的发生。
而当事故发生的时候,有组织逃生能力的人能临危不乱的有效保护好自己以及家人的生命安全,等待救援。
所以这些知识其实平时用处可能特别少,但是真正要用的时候,则可能就是生死攸关的关头了。
第一天的讲座主要就是围绕安全知识展开。
讲座结束后我们就去工厂里面参观了,看到了汽车的轴承,发动机等以前只用没见过的东西。
一路上,给我们做报告的工作人员细心的给我们讲解了一些流程和制造中我们不太明白的地方,我们也提出了一些自己感兴趣的问题。
到了中午我们就回学校了。
第二天我们照旧到达了福田汽车厂,而第二天的内容则是汽车底盘构造基础培训。
地盘结构分为:发动机、传动系、行驶系、转向系、制动系。
数据结构实训实验报告

一、实验背景数据结构是计算机科学中一个重要的基础学科,它研究如何有效地组织和存储数据,并实现对数据的检索、插入、删除等操作。
为了更好地理解数据结构的概念和原理,我们进行了一次数据结构实训实验,通过实际操作来加深对数据结构的认识。
二、实验目的1. 掌握常见数据结构(如线性表、栈、队列、树、图等)的定义、特点及操作方法。
2. 熟练运用数据结构解决实际问题,提高算法设计能力。
3. 培养团队合作精神,提高实验报告撰写能力。
三、实验内容本次实验主要包括以下内容:1. 线性表(1)实现线性表的顺序存储和链式存储。
(2)实现线性表的插入、删除、查找等操作。
2. 栈与队列(1)实现栈的顺序存储和链式存储。
(2)实现栈的入栈、出栈、判断栈空等操作。
(3)实现队列的顺序存储和链式存储。
(4)实现队列的入队、出队、判断队空等操作。
3. 树与图(1)实现二叉树的顺序存储和链式存储。
(2)实现二叉树的遍历、查找、插入、删除等操作。
(3)实现图的邻接矩阵和邻接表存储。
(4)实现图的深度优先遍历和广度优先遍历。
4. 算法设计与应用(1)实现冒泡排序、选择排序、插入排序等基本排序算法。
(2)实现二分查找算法。
(3)设计并实现一个简单的学生成绩管理系统。
四、实验步骤1. 熟悉实验要求,明确实验目的和内容。
2. 编写代码实现实验内容,对每个数据结构进行测试。
3. 对实验结果进行分析,总结实验过程中的问题和经验。
4. 撰写实验报告,包括实验目的、内容、步骤、结果分析等。
五、实验结果与分析1. 线性表(1)顺序存储的线性表实现简单,但插入和删除操作效率较低。
(2)链式存储的线性表插入和删除操作效率较高,但存储空间占用较大。
2. 栈与队列(1)栈和队列的顺序存储和链式存储实现简单,但顺序存储空间利用率较低。
(2)栈和队列的入栈、出队、判断空等操作实现简单,但需要考虑数据结构的边界条件。
3. 树与图(1)二叉树和图的存储结构实现复杂,但能够有效地表示和处理数据。
数据结构实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中重要的基础课程,通过本次实验,旨在深入理解和掌握常见数据结构的基本概念、操作方法以及在实际问题中的应用。
具体目的包括:1、熟练掌握线性表(如顺序表、链表)的基本操作,如插入、删除、查找等。
2、理解栈和队列的特性,并能够实现其基本操作。
3、掌握树(二叉树、二叉搜索树)的遍历算法和基本操作。
4、学会使用图的数据结构,并实现图的遍历和相关算法。
二、实验环境本次实验使用的编程环境为具体编程环境名称,编程语言为具体编程语言名称。
三、实验内容及步骤(一)线性表的实现与操作1、顺序表的实现定义顺序表的数据结构,包括数组和表的长度等。
实现顺序表的初始化、插入、删除和查找操作。
2、链表的实现定义链表的节点结构,包含数据域和指针域。
实现链表的创建、插入、删除和查找操作。
(二)栈和队列的实现1、栈的实现使用数组或链表实现栈的数据结构。
实现栈的入栈、出栈和栈顶元素获取操作。
2、队列的实现采用循环队列的方式实现队列的数据结构。
完成队列的入队、出队和队头队尾元素获取操作。
(三)树的实现与遍历1、二叉树的创建以递归或迭代的方式创建二叉树。
2、二叉树的遍历实现前序遍历、中序遍历和后序遍历算法。
3、二叉搜索树的操作实现二叉搜索树的插入、删除和查找操作。
(四)图的实现与遍历1、图的表示使用邻接矩阵或邻接表来表示图的数据结构。
2、图的遍历实现深度优先遍历和广度优先遍历算法。
四、实验结果与分析(一)线性表1、顺序表插入操作在表尾进行时效率较高,在表头或中间位置插入时需要移动大量元素,时间复杂度较高。
删除操作同理,在表尾删除效率高,在表头或中间删除需要移动元素。
2、链表插入和删除操作只需修改指针,时间复杂度较低,但查找操作需要遍历链表,效率相对较低。
(二)栈和队列1、栈栈的特点是先进后出,适用于函数调用、表达式求值等场景。
入栈和出栈操作的时间复杂度均为 O(1)。
2、队列队列的特点是先进先出,常用于排队、任务调度等场景。
(完整word版)北京理工大学数据结构课程设计学生信息管理专题报告

专题设计(链表)报告题目:学生成绩管理系统小组成员:专题报告—————第十组问题描述设计一个“学生成绩管理系统”。
主要实现学生信息的录入、添加、修改、删除、排序和查看等基本功能。
设计要求编写一个学生成绩管理程序。
学生成绩以一个学生一条记录的形式存储,每个学生记录包含的信息有序号、学号、姓名及5门功课的成绩。
具体功能如下:a. 获取学生成绩。
可以从文件中读取成绩,也可直接录入。
查询学生成绩,输入学生学号或姓名等信息后,显示学生在成绩单中的位置及所有信息。
b. 添加学生成绩,在学生成绩单的指定位置添加学生成绩信息。
c. 修改学生成绩,在学生成绩单中,修改指定学生的成绩信息。
d. 删除学生成绩,在学生成绩单中,删除指定学生的成绩信息。
e. 保存文件。
当学生成绩单发生添加、修改、删除等变化后,都要对最终结果进行保存。
数据结构学生成绩可以用单链表存储,方便随时插入和删除学生成绩记录,实现动态管理。
一个学生作为一个结点。
使用链表的基本算法实现学生成绩单的各项管理功能。
设计与实现成绩信息管理系统具体分为两个模块:数据类和功能类。
数据类包括学生的姓名、学号及成绩等信息。
通过对学生信息管理系统的功能分析,可以定义出系统的总体功能结构模块图,如上图所示。
当用户运行该系统后可以来进行学生信息信息(录入)插入管理、学生信息修改管理、学生信息删除管理、学生信息显示管理及学生信息显示等操作。
根据功能需求的结果分析,主界面应该由学生信息录入管理、学生信息插入管理、学生信息修改管理、学生信息删除管理、学生信息显示管理和学生信息信息查询管理组成,可以通过输入相应的数字进入相应的功能模块。
在本系统中需要编码实现的主要有学生信息录入、学生成绩信息插入、学生成绩信息查询、学生成绩信息修改、学生成绩信息删除和学生成绩信息输出等6个功能模块,以及学生信息的文件存储与读取功能。
学生成绩信息录入模块:添加的信息包括姓名、学号及各科成绩。
实际流程为开始→输入学生信息→调用类成员函数采用单链表保存数据→结束。
哈尔滨理工大学数据结构实验报告线性表

课程名称:数据结构实验项目:线性表姓名:zhangsan专业:网络工程班级:09-1班00000 10000计算机科学与技术学院实验教学中心20 11年 5 月17 日实验项目名称:线性表(学时)一、实验目的了解顺序表的结构特点及有关概念,掌握顺序表建立、插入、删除的基本操作算法。
2.了解单链表的结构特点及有关概念,掌握单链表建立、插入、删除的基本操作算法。
二、实验内容1.顺序表的实践。
1)建立4个元素的顺序表list[]={2,3,4,5},实现顺序表建立的基本操作。
2)在list[]={2,3,4,5}的元素4和5之间插入一个元素9,实现顺序表插入的基本操作。
3)在list[]={2,3,4,9,5}中删除指定位置(i=3)上的元素9,实现顺序表的删除的基本操作。
2.单链表的实践。
1)建立一个包括头结点和3个结点的(4,2,1)的单链表,实现单链表建立的基本操作。
2)在已建好的单链表中的指定位置(x=2)插入一个结点3,实现单链表插入的基本操作。
3)在一个包括头结点和4个结点的(4,2,3,1)的单链表的指定位置删除一个结点,实现单链表删除的基本操作。
三、实验步骤线性表(linear list)是n(n≥0)个数据元素a1,a2,…an组成的有限序列。
其中n 称为数据元素的个数或线性表的长度,当n=0时称为空表,n>0时称为非空表。
通常将非空的线性表记为(a1,a2,…,an),其中的数据元素ai(1≤i ≤n)是一个抽象的符号, ai是第i个数据元素,称i为数据元素ai在线性表中的位置。
其具体含义在不同情况下是不同的,即它的数据类型可以根据具体情况而定,本书中,我们将它的类型设定为elemtype,表示某一种具体的已知数据类型。
顺序表也称为线性表的顺序存储结构。
其存储方式为:在内存中用一组地址连续的存储单元依次存储线性表的数据元素,但该连续存储空间的大小要大于或等于顺序表的长度。
一般让线性表中第一个元素存放在连续存储空间第一个位置,第二个元素紧跟着第一个之后,其余依此类推。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构与算法统计》实验报告——实验三一、实验目的1. 熟悉VC环境,掌握对二叉树的基本操作。
2. 在上机、调试的过程中,加强对二叉树的理解和运用。
3. 复习线性链表和递归4. 锻炼动手编程和独立思考的能力。
二、实验内容遍历二叉树。
请输入一棵二叉树的扩展的前序序列,经过处理后生成一棵二叉树,然后对于该二叉树输出前序、中序和后序遍历序列。
三、程序设计1、概要设计本程序包含三个模块:1.构造二叉树模块2.遍历二叉树模块3.主程序模块采用二叉链表作为存储结构。
(1)二叉树的抽象数据类型定义为:ADT BinaryTree {数据对象D:D是具有相同特性的数据元素的集合。
数据关系R:若D=Φ,则R=Φ,称BinaryTree为空二叉树;若D≠Φ,则R={H},H是如下二元关系;(1)在D中存在惟一的称为根的数据元素root,它在关系H下无前驱;(2)若D-{root}≠Φ,则存在D-{root}={D1,Dr},且D1∩Dr =Φ;(3)若D1≠Φ,则D1中存在惟一的元素x1,<root,x1>∈H,且存在D1上的关系H1 ⊆H;若Dr≠Φ,则Dr中存在惟一的元素xr,<root,xr>∈H,且存在上的关系Hr ⊆H;H={<root,x1>,<root,xr>,H1,Hr};(4)(D1,{H1})是一棵符合本定义的二叉树,称为根的左子树;(Dr,{Hr})是一棵符合本定义的二叉树,称为根的右子树。
基本操作:CreatBiTree(BiTree &T)操作结果:按先序次序建立二叉链表表示的二叉树TPreOrderTraverse(BiTree T,int (*visit)(char e))初始条件:二叉树T已经存在,visit是对结点操作的应用函数操作结果:先序遍历二叉树T ,对每个结点调用visit函数仅一次;一旦visit()失败,则操作失败。
InOrderTraverse(BiTree T,int (*visit)(char e))初始条件:二叉树T已经存在,visit是对结点操作的应用函数操作结果:中序遍历二叉树T ,对每个结点调用visit函数仅一次;一旦visit()失败,则操作失败。
PostOrderTraverse(BiTree T,int (*visit)(char e))初始条件:二叉树T已经存在,visit是对结点操作的应用函数操作结果:后序遍历二叉树T ,对每个结点调用visit函数仅一次;一旦visit()失败,则操作失败。
} ADT BinaryTre e(2)主程序流程主程序先调用CreatBiTree(BiTree &T)函数,根据输入的先序序列构造出一棵二叉树,再依次调用PreOrderTraverse(BiTree T,int (*visit)(char e)),InOrderTraverse(BiTree T,int (*visit)(char e)),PostOrderTraverse(BiTree T,int (*visit)(char e))函数,对该二叉树进行先序、中序、后序遍历并输出结果。
(3)模块调用关系由主函数调用创建模块,再调用计算模块,由计算模块将结果输出。
(4)流程图开始创建二叉树输入先序序列先序遍历二叉树分别调用函数中序遍历二叉树输出结果后序遍历二叉树结束2、详细设计⑴数据类型设计typedef struct BiTNode//二叉树结构类型{char data;//建立数据域struct BiTNode *lchild,*rchild;//建立左指针和右指针}BiTNode,*BiTree;⑵操作算法设计int CreatBiTree(BiTree &T)//按先序次序建立二叉链表表示的二叉树Tchar ch;scanf("%c",&ch);if(ch==' '){T=NULL;}else{T=(BiTNode *)malloc(sizeof(BiTNode));if(!T){exit (OVERFLOW);}T->data=ch;CreatBiTree(T->lchild);CreatBiTree(T->rchild);}return 1;}int visit(char e)//对数据进行输出{printf("%c",e);return 1;}int PreOrderTraverse(BiTree T,int (*visit)(char e))//先序遍历二叉树T的递归算法{if(T){if(visit(T->data))if(PreOrderTraverse(T->lchild,visit))if(PreOrderTraverse(T->rchild,visit)) return 1;return 0;}elsereturn 1;}int InOrderTraverse(BiTree T,int (*visit)(char e))//中序遍历二叉树T的递归算法if(T){if(InOrderTraverse(T->lchild,visit))if(visit(T->data))if(InOrderTraverse(T->rchild,visit)) return 1;return 0;}elsereturn 1;}int PostOrderTraverse(BiTree T,int (*visit)(char e))//后序遍历二叉树T的递归算法{if(T){if(PostOrderTraverse(T->lchild,visit))if(PostOrderTraverse(T->rchild,visit))if(visit(T->data)) return 1;return 0;}elsereturn 1;}⑶主函数设计void main()//主函数{BiTree T;CreatBiTree(T); //按先序次序建立二叉链表表示的二叉树T printf("PreOrderTraverse:\n");PreOrderTraverse(T,visit); ;//先序遍历二叉树Tprintf("\n");printf("InOrderTraverse:\n");InOrderTraverse(T,visit); //中序遍历二叉树Tprintf("\n");printf("PostOrderTraverse:\n");PostOrderTraverse(T,visit); //后序遍历二叉树Tprintf("\n");}四、程序调试分析(1)首先需要注意二叉树先序序列的输入问题。
开始输入时经常没有输出,多次尝试之后发现是因为没有打上空子树导致的。
遍历时,内容为空的结点需要以空格“”的形式代替,这样才能成功识别,构造出一颗完整的二叉树。
(2)开始时忽略了一些宏定义,调试过程浪费了许多时间。
说明基本功是十分重要的,而且编程也需要足够的细心额耐心。
(3)进行先序遍历时,访问左子树后程序即结束,不访问根结点和右子树。
后来发现是“return 0;”还是“return 1;”的问题。
递归时,“return 0;”代表程序结束,“return 1;”代表回到原位置继续执行。
以后应加强对于基础知识的理解。
五、程序运行结果用例一:ABC DE G FPreOrderTraverse:ABCDEGFInOrderTraverse:CBEGDFAPostOrderTraverse:CGEFDBA用例二:123 45 7 6PreOrderTraverse:1234576InOrderTraverse:3257461PostOrderTraverse:3756421用例三:APreOrderTraverse:AInOrderTraverse:APostOrderTraverse:A六、程序清单#include <iostream>#include <stdio.h>#include <stdlib.h>#define OVERFLOW 0typedef struct BiTNode//二叉树结构类型{char data;//建立数据域struct BiTNode *lchild,*rchild;//建立左指针和右指针}BiTNode,*BiTree;int CreatBiTree(BiTree &T);//按先序次序建立二叉链表表示的二叉树Tint visit(char e);//对数据进行输出int PreOrderTraverse(BiTree T,int (*visit)(char e));//先序遍历二叉树T的递归算法int InOrderTraverse(BiTree T,int (*visit)(char e));//中序遍历二叉树T的递归算法int PostOrderTraverse(BiTree T,int (*visit)(char e));//后序遍历二叉树T的递归算法void main()//主函数{BiTree T;CreatBiTree(T); //按先序次序建立二叉链表表示的二叉树Tprintf("PreOrderTraverse:\n");PreOrderTraverse(T,visit); ;//先序遍历二叉树Tprintf("\n");printf("InOrderTraverse:\n");InOrderTraverse(T,visit); //中序遍历二叉树Tprintf("\n");printf("PostOrderTraverse:\n");PostOrderTraverse(T,visit); //后序遍历二叉树Tprintf("\n");}int CreatBiTree(BiTree &T)//按先序次序建立二叉链表表示的二叉树T{char ch;scanf("%c",&ch);if(ch==' '){T=NULL;}else{T=(BiTNode *)malloc(sizeof(BiTNode));if(!T){exit (OVERFLOW);}T->data=ch;CreatBiTree(T->lchild);CreatBiTree(T->rchild);}return 1;}int visit(char e)//对数据进行输出{printf("%c",e);return 1;}int PreOrderTraverse(BiTree T,int (*visit)(char e))//先序遍历二叉树T的递归算法{if(T){if(visit(T->data))if(PreOrderTraverse(T->lchild,visit))if(PreOrderTraverse(T->rchild,visit)) return 1;return 0;}elsereturn 1;}int InOrderTraverse(BiTree T,int (*visit)(char e))//中序遍历二叉树T的递归算法{if(T){if(InOrderTraverse(T->lchild,visit))if(visit(T->data))if(InOrderTraverse(T->rchild,visit)) return 1;return 0;}elsereturn 1;}int PostOrderTraverse(BiTree T,int (*visit)(char e))//后序遍历二叉树T的递归算法{if(T){if(PostOrderTraverse(T->lchild,visit))if(PostOrderTraverse(T->rchild,visit))if(visit(T->data)) return 1;return 0;}elsereturn 1;}。