二叉树实验报告

时间:2024.4.21

过程控制软件技术基础课程实验报告

实验项目:二叉树的建立和遍历

姓名:        戚风亮     

学号:     1008180230    

指导教师:      任登凤     

1. 实验目的

通过自主设计实验,掌握过程控制软件的基础理论知识,本实验具体表现为二叉树的建立和遍历,为以后计算机控制的软件设计提供基础。提高逻辑思维方式,培养应用可视化编程工具开发计算机软件的能力。

2. 实验内容

    本文主要介绍二叉树的建立和遍历。所使用的编程软件为matlab2010版本,主要使用其中的GUI功能,完成可视化界面操作。从更直接的角度感受二叉树的建立和遍历。

     二叉树的建立和遍历包含两个方面:建立和遍历。其中建立包括输入二叉树的每一个结点的元素,以及二叉树每一个结点的随机存储地址。与此同时,更重要的是创建两个指针域:左指针域L和右指针域R,在本次实验中,采用产生随机数的方式生成随机存储地址,采用两个数组代表两个指针域。二叉树的遍历采用递归函数的方式,本实验中采用三个函数Front,Middle,Behind分别实现前序、中序以及后序的功能。

(1)界面的设计:

软件的设计界面见图1。

                                图1 软件的总体界面

界面中主要包括以下几个部分:

a. 深度m的输入框:此输入框在输入某个数值后将决定二叉树的深度,值得注意的是:本次实验中的设计标准为4层,即最大为4层。当输入数值大于4时,将提示出错(见图2),并要求重新输入。

图2. 出错消息提醒框

同时,当输入层数小于4时,软件将自动消去最后的那几层结点。(见图3)

图3. 软件自动按要求生成二叉树层数

b. 二叉树结点元素输入框:

     二叉树结点元素输入框用于输入每个结点的元素值,同时按照二叉树的规则,每一个根结点对应至少两个子结点,即如果根结点的值为空(没有值),则它的子结点输入框不得输入,即其enabled属性为false(背景色为灰色,见图3)。当根结点输入值后,子结点输入框即可输入(见图4)。

    与此同时,由于matlab的GUI中,没有向VB中的line控件,所以必须用代码加以实现,在matlab中,函数annotation可以用来画箭头,具体如下:

arr(1,1)=annotation(gcf,'arrow',[0.5 0.35],[0.8 0.75]);

    其中,后面的两组数据为坐标值,arr(1,1)表示第一排的第一个箭头,在matlab中的每个图象都对应一个句柄值,这样,所有箭头都对应各自的句柄值,进而形成一个所有箭头的数组,便于管理每一个图像。 

图4. 根结点输入后子结点方可输入

c. 控制按钮:生成二叉树

     生成二叉树的主要功能是,将没有输入值的结点以及箭头隐藏,同时为每一个结点分配随机的存储地址(见图5),进而形成左右指针域。

图5. 最终形成的二叉树

如图5所示,在每个结点的左边有一个数字,即代表该结点在内存中的随机地址。该数字由matlab内部函数randperm产生。如:

data=randperm(5) 即产生1——5的5个随机数(各不相同),并赋值给数组data。

本次实验中,最关键的是左右指针域的建立,即左右数组的建立。为实现这个功能,创建函数[L,R,VV]=point。

其中L表示左指针域,R代表右指针域,VV代表值域。至此,二叉树已完全建立。

d. 重置按钮:将界面设置为初始状态

e. 退出按钮:退出系统

f. 前序按钮:生成二叉树的前序遍历。(中序按钮、后序按钮依次类推)

3. 软件总体结构、程序流程图

软件总体结构:

(1)软件界面总体上有三个部分:

        输入界面                二叉树总体结构

        控制界面                二叉树最终形成

        结果界面                二叉树遍历显示

(2)软件程序总体上有以下几个方面:

a. 名为gouzao的函数:该函数输入参数为输入框的坐标(x,y),返回该输入框的特点。即只有该输入框存在值时,它对应的子结点输入框方可输入。这里所谓的存在值的相反面是“非空”,而并非“空字符串”。

b. 名为point的函数:该函数没有输入参数,但可以返回左指针域、右指针域以及值域。其调用格式为[L,R,VV]=point。

c. 名为Front、Middle、Behind的函数:这三个函数分别返回前序遍历、中序遍历、后序遍历的结果。

d. 名为Erchashu的函数:该函数为matlab的GUI中系统自动生成的m文件格式的函数。它是整个系统的中枢,整合了以上的所有函数。

程序流程图:

图6. 程序流程图

4. 实验中遇到的问题及解决方法

  本次实验中主要有以下两个:

(1)在设置每个结点的回调函数时,应首先判断根结点是否为控制,所谓控制并非“‘ ’”,即无法用string=“”判断,而是利用empty判断。这样防止根结点在输入后又删除之后产生的不符合规定的结果。

(2)递归函数的建立:

在matlab中,函数的参数值无法实现按地址传递,只能按值传递,这就意味着递归函数不能像VB中那样地建立。为此,在每一次回调函数时,必须先将必要的参数寄存在一个变量中,本实验中利用句柄的“userdata”属性,将值储存在变量中,在利用时,再将变量值取出。本实验中使用了写文件方式,将数据先写入外部文件中,所以在不同机器上运行时,应注意文件所在的目录。

5. 实验的独到见解

    虽然本次实验能完成所有预定功能,但毕竟二叉树是在预先定义好的情况下产生的,比如二叉树的层数最多支持四层等等,都在一定程度上影响了程序的通用性。

       


第二篇:实验总结报告


实验报告

专业:______ 姓名:______ 学号:______日期:______ 桌号:______________ 课程名称: 模拟电子技术基础实验 指导老师: 成绩:________________ 实验名称: 实验总结报告

一、体会与收获

在这个学期中,我们一共完成了从常用电子仪器的使用到EDA 半导体器件特性仿真等五个实验课题。具体的实验情况在实验报告中已经很清楚的反映了。在此我想谈谈我的体会与收获。

首先,我们在试验中面临着很多问题。实验仪器就是其中之一。实验室中的很多仪器:示波器、交流毫伏表,确实是由于年代久远而不能正常工作。但我发现,很多同学在实验现象没出来的情况下就借口说是实验仪器的问题。其实不然。很多情况下,仪器没有调试好,导致现象不明显或者与理论相差甚远。

在做基本运算电路设计实验时,通过老师上课精彩的讲解使我感受到了一种“新的世界观”,认识到了理论学习和实验的区别,在以后做实验的时候要对所有器械保持怀疑的心态,坚持“自己测的才是准的”原则。

通过解决每一次实验出现的问题,我在做实验的时候变得更加有耐心。在连接电路前,都会认真分析一下实验原理。然后根据实验书和老师的ppt上的步骤一步一步的来做。果然,出现错误的几率小了很多。其次,做实验要养成好的习惯。很多同学在做实验的时候态度很随便。没有注意诸如:连线之前检查导线是否导通、用万用表测电阻时不质疑短接调零、链接电路是带电操作等等。也许,在很多人看来这些都是小问题。但真正每一次都做到一丝不苟,养成良好的习惯的同学并不多。

接下来,我想说的是实验的目的。刚开始,我认为实验是一项任务,只要完成了就行。无非就是照着课本连连线、得出个已经计算好的结果就行了。但自从自己做功放后我改变了这种看法。在做功放的时候,虽然原理图都是被人提前设计好的。但是在做得时候总是会需要自己去调试、布线。有时候看似连接的很完美的电路,可能会因为某个地方的虚焊而不能工作。这种情况非常锻炼你能力。在找错误的地方的时候你自然而然的明白了电路的原理。而且,当做好一个自己独立完成的功放后,会有一种成就感。

最后,我想说实验跟课本的理论相结合,在课本中学习,在实验中检验。在实验中发现,用课本知识去分析。兴趣就在这一个个的实验中激发了。当然,我明白大学的最终目的不是让我们去做一些诸如功放之类的东西,而是锻炼我们去探索、去发现、去学习的能力。可能我们做的某项东西很简单或者没有做成功,但那并不是失败,因为你已经学习到了许多。耐心并且细心的去做每一步,坚持严谨的态度做到最后。每一个人都是成功者。

二、意见与建议

对模电实验的建议:

①老师在讲课过程中的实物演示部分,可以用幻灯片播放拍摄的操作短片,或是在大屏幕上放出实物照片进行讲解,因为用第一排的仪器或元件直接讲解的话看的不是很清楚。

②实验室里除了后面的几台,前面也时不时有示波器故障,如果没有发现示波器已故障的话会给实验带来麻烦。因此希望老师可以教几个识别示波器是否故障的方法。

1

③选题方面,从元件的认识逐渐过渡到焊电路板进行实验,内容涵盖面合理,没有更多的建议了。

感谢老师半学期来的教诲和指导!

三、课程评价

在大学二年级的第一学期,我们按课程计划,完成了模电实验课程的学习,我感到收获很大。 老师在讲解实验课程时:教学内容丰富,授课生动、详细,思路清晰,富有逻辑性、启发性,而且善于激励学生兴趣,经常产生师生互动;他理论知识功底深厚,实践经验丰富,并且能够理论联系实际,举例生动形象,对模电的理论学习有很大帮助;教学方式得当,能够因材施教,给学生一个相对自我发展的空间。

他讲课时语言幽默,平易近人,关心学生,深受同学好评;讲课过程中认真负责,严格要求,把教书育人很好地结合起来。

通过模电实验课程,增强了我的动手能力,帮助我在以后的学习生活中能够顺利解决一些难题。希望学校今后能够为学生多开类似的课程,让在校的学生得到更多的锻炼机会。

2

更多相关推荐:
实验六 二叉树实验报告(1)

实验四二叉树的操作班级:计算机1002班姓名:**学号:**完成日期:20XX.6.14题目:对于给定的一二叉树,实现各种约定的遍历。一、实验目的:(1)掌握二叉树的定义和存储表示,学会建立一棵特定二叉树的方法…

二叉树实验报告

实验六树和二叉树的操作一实验目的1进一步掌握树的结构及非线性特点递归特点和动态性2进一步巩固对指针的使用和二叉树的三种遍历方法建立方法二实验内容二叉树的实现和运算三实验要求1用CC完成算法设计和程序设计并上机调...

树和二叉树实验报告

树和二叉树一实验目的1掌握二叉树的结构特征以及各种存储结构的特点及适用范围2掌握用指针类型描述访问和处理二叉树的运算二实验要求1认真阅读和掌握本实验的程序2上机运行本程序3保存和打印出程序的运行结果并结合程序进...

二叉树基本操作--实验报告

宁波工程学院电信学院计算机教研室实验报告一实验目的1熟悉二叉树树的基本操作2掌握二叉树的实现以及实际应用3加深二叉树的理解逐步培养解决实际问题的编程能力二实验环境1台WINDOWS环境的PC机装有VisualC...

二叉树实验报告

二叉树实验报告问题描述1问题描述用先序递归过程建立二叉树存储结构二叉链表输入数据按先序遍历所得序列输入当某结点左子树或右子树为空时输入号如输入abcde得到的二叉树为编写递归算法计算二叉树中叶子结点的数目按凹入...

二叉树实验报告

数据结构课程设计报告专业计算机科学与技术班级3班姓名学号指导教师起止时间20xx1220xx1课程设计二叉树一任务描述二叉树的中序前序后序的递归非递归遍历算法应包含建树的实现任务设计一个程序实现二叉树的前序中序...

二叉树的遍历实验报告

二叉树的遍历实验报告一需求分析在二叉树的应用中常常要求在树中查找具有某种特征的结点或者对树中全部结点逐一进行某种处理这就是二叉树的遍历问题对二叉树的数据结构进行定义建立一棵二叉树然后进行各种实验操作二叉树是一个...

二叉树实验报告

数据结构实验报告专业班级计算机科学与技术姓名学号一实验目的和要求上机学习二叉树二实验内容实现二叉树的各项算法并掌握其用法如二叉树的构造先中后序遍历层次遍历等等三实验过程31设计算法1二叉树的构造通过对二叉树的先...

二叉树实验报告

二叉树实验报告题目以三元组形式输入任意二叉树以大写字母表示结点求以任意一选定结点为子树的深度1编程思路概述实验采用二叉树的数据结构以二叉链表存储三元组形式输入建立二叉树本实验中用户输入选择结点后程序调用BiTN...

二叉树实验报告

一二叉树基础1定义有且仅有一个根结点除根节点外每个结点只有一个父结点最多含有两个子节点子节点有左右之分2存储结构二叉树的存储结构可以采用顺序存储也可以采用链式存储其中链式存储更加灵活在链式存储结构中与线性链表类...

树和二叉树的实验报告

数据结构实验报告题目树和二叉树一用二叉树来表示代数表达式一需求分析输入一个正确的代数表达式包括数字和用字母表示的数运算符号及括号系统根据输入的表达式建立二叉树按照先括号里面的后括号外面的先乘后除的原则每个节点里...

二叉树的建立及遍历实验报告

实验三二叉树的建立及遍历实验目的1掌握利用先序序列建立二叉树的二叉链表的过程2掌握二叉树的先序中序和后序遍历算法实验内容1编写程序实现二叉树的建立并实现先序中序和后序遍历如输入先序序列abcde则建立如下图所示...

二叉树实验报告(43篇)