实验三 树的应用
树的实验报告

树的实验报告树的实验报告引言:树是自然界中最重要的生物之一,它们在维持生态平衡、提供氧气、保护土壤等方面发挥着重要作用。
为了更好地了解树的生长过程和影响因素,我们进行了一项树木生长实验。
本报告将详细介绍实验的目的、方法、结果和讨论。
1. 实验目的:我们的实验旨在探究不同环境条件对树木生长的影响。
通过对树木的生长速度、叶片形态和根系结构等方面的观察和测量,我们希望了解环境因素对树木生长的影响,并为树木的种植和保护提供科学依据。
2. 实验方法:我们选取了三种常见的树木品种作为研究对象,分别是松树、橡树和枫树。
为了控制环境条件,我们在实验室内设置了三个不同的生长箱,分别模拟了阳光充足、水分充足和温度适宜的自然环境。
每个生长箱内种植了相同数量和大小的树苗,并定期给予适量的水分和光照。
3. 实验结果:经过数月的观察和测量,我们得出了以下实验结果:3.1 生长速度:在相同环境条件下,松树的生长速度最快,其次是橡树,枫树的生长速度最慢。
这可能与不同树种的生长特性和适应性有关。
3.2 叶片形态:松树的叶片较为细长,适应干燥环境;橡树的叶片较大而厚实,适应多变的气候;枫树的叶片呈手掌状,适应湿润的环境。
不同树种的叶片形态反映了它们对环境的适应性。
3.3 根系结构:松树的根系较为发达,深入土壤;橡树的根系较为广泛,能够吸收更多的水分和养分;枫树的根系比较浅,适应湿润的环境。
根系结构的差异使得不同树种在各种环境条件下都能够生存和生长。
4. 实验讨论:通过这次实验,我们发现树木的生长受到多种环境因素的影响。
阳光、水分和温度是树木生长的重要因素,它们直接影响着光合作用、水分吸收和代谢活动等生理过程。
不同树种对环境的适应性不同,这使得它们在不同的地理位置和气候条件下具有不同的分布范围。
此外,树木的生长速度、叶片形态和根系结构等特征也受到基因和遗传因素的影响。
不同树种的遗传背景和基因表达方式决定了它们的生长方式和适应性。
因此,在进行树木种植和保护时,需要考虑到树种的适应性和生长特点,以便选择合适的树种和提供适宜的环境条件。
园林树木实验报告

园林树木实验报告园林树木实验报告引言:园林树木是城市中重要的绿色资源,它们不仅能够美化环境,还能提供阴凉和氧气。
然而,由于城市化的快速发展和环境污染的加剧,园林树木的生长状况受到了一定的影响。
为了解决这一问题,我们进行了一项园林树木实验,以探究树木的生长与环境因素之间的关系。
实验目的:本实验旨在研究不同环境因素对园林树木生长的影响,以期为城市园林管理提供科学依据。
实验设计:我们选取了三种常见的园林树木:榉树、松树和樱花树作为实验对象。
每种树木各选取10株,共计30株。
实验分为三组,每组分别设置不同的环境因素。
实验一:光照条件对园林树木生长的影响我们将第一组的树木放置在充足的阳光下,第二组的树木放置在半阴半阳的环境中,第三组的树木放置在完全阴影的环境中。
每组树木的生长情况将被记录和比较。
实验二:水分供给对园林树木生长的影响我们将第一组的树木按照正常的浇水量进行水分供给,第二组的树木减少一半的浇水量,第三组的树木则只给予最低限度的水分供给。
通过观察树木的叶片状态和生长情况,我们将分析不同水分供给对树木生长的影响。
实验三:土壤质量对园林树木生长的影响我们选择三种不同质量的土壤:肥沃的土壤、中等质量的土壤和贫瘠的土壤。
每组树木将分别种植在不同的土壤中,并进行比较观察。
实验结果:经过一段时间的观察和记录,我们得出了以下结论:光照条件对园林树木生长的影响:在充足的阳光下,树木的生长状况最好,叶片绿色鲜亮,树干粗壮。
半阴半阳的环境下,树木的生长速度较慢,叶片颜色相对较浅。
完全阴影的环境下,树木的生长明显受到抑制,叶片变黄,树干细弱。
水分供给对园林树木生长的影响:正常浇水量的树木生长状况最好,树木的叶片饱满绿色,树干有弹性。
减少浇水量的树木叶片开始出现干枯现象,树干变得干燥。
最低限度的水分供给会导致树木的叶片枯萎,树干出现裂纹。
土壤质量对园林树木生长的影响:肥沃的土壤有助于树木的生长,根系发达,树木的叶片繁茂。
实验三--果树花芽分化的观察实验

实验三果树花芽分化的观察一、目的要求通过对花芽分化不同阶段的花器分化情况的观察,以便加深和验证课堂讲授的内容。
要求初步掌握观察花芽分化的徒手切片及镜检技术。
二、材料用具材料采取花芽分化各时期的苹果(或桃)的结果枝,苹果和桃花芽分化各个时期的固定切片。
用具双目立体显微镜(或解剖镜),刀片,镊子,解剖针,烧杯(500毫升),培养皿,载玻片,盖玻片。
(一)制作徒手切片按采取时期顺序取苹果(或桃)的结果枝,用镊子由外及里剥去花芽的鳞片,露出花序原始体,然后用力片从花序原始体的左上方轻轻往右下方切割,切割的花序原始体习芍片,愈薄愈好,1个花序原始体可连续切割数片,将切下的薄片放入盛水的培养皿中。
1个花序原始体切割完毕后,将培养皿中的小薄片,依次排列于载玻片上,用1%的刚果红染色,经1-3分钟后,用清水洗净,加上盖玻片,即可在显微镜下观察。
如无染色剂,亦可直接在显微镜下观察。
(桃的花芽徒手切片的操作与苹果大体相同,唯剥去外部较硬鳞片后,可保留柔软苞片,即可切割。
)(二)镜检观察将制成切片置于双目立体显微镜或低倍显微镜下依次检查。
并与标准固定切片相对照,以识别花芽分化所处的时期。
苹果的花芽分化时期(参阅《各论》图1-4:苹果花芽分化图)(1)未分化期生长点平滑不突出,但四周凹陷不明显。
(2)分化始期生长点肥大,突起。
虽半球形,四周下陷。
(3)花原始体出现期肥大的生长点四周有突起的状态,为花原基体。
(4)萼片形成期生长点下陷,四周突起,即萼片原始体。
(5)花瓣形成期萼片原始体伸长,其内侧基部产生新的突起,即花瓣原始体。
(6)雄蕊形成期花瓣原始体内侧基部产生新的突起,即雄蕊原始体。
(7)雌蕊形成期花蕾原始体中心基部产生突起,即雌蕊原始体。
四、作业绘制观察到的苹果的花芽切片图,并注明分化时期及花器各部名称。
实验三-生成树ls

计算机网络实验 王爱新交换实验三---------管理交换机的冗余链路一、项目问题某单位采用2台交换机组成一个局域网,由于很多数据流量是跨过交换机进行传输的,因此为了提高交换机之间的传输带宽,并实现链路冗余备份,在2台交换机之间采用2根网线相连,此时在网络中间形成了环路,有可能引起广播风暴。
怎样才能避免呢?管理员可用两种方法:1、可以用端口聚合来解决,实际上端口聚合主要目的使增加网络连接带宽的,避免在交换机与交换机连接时产生瓶颈。
2、启用交换机的生成树功能。
二、项目实施环境S2126G 交换机2台,操作系统为Windows 的PC 机2台,网络拓朴如图所示,PC1连接switch1的FastEthernet0/22端口,PC2连接switch2的FastEthernet0/22端口,switch1和switch2之间通过快速以太网端口Fa0/12 、Fa0/2端口连接。
F0/2PCPCF0/122126-12126-2F0/1F0/2F0/22F0/22三、主要任务1、配置生成树协议STP2、配置快速生成树协议RSTP四、项目实践目的1、理解生成树协议STP及快速生成树协议RSTP的原理2、掌握生成树协议STP及快速生成树协议RSTP的配置五、项目实施步骤(一)启用生成树协议实现冗余备份1、两台交换机之间先连接一条电缆2.在每台交换机上开启生成树协议switchx# conf terswitchx(config)# spanning-tree问:这个命令的作用是什么?switchx(config)#endswitchx# show spanning-treeswitchx# show spanning-tree interface fastethernet 0/123.在每台交换机上设置生成协议switchx(config)# spanning-tree mode stpswitchx# show spanning-tree4.把两台交换机之间的第二根电缆连接好,设置交换机的优先级把交换机Switch1的优先级设为4096,Switch2的优先级采用默认值32768。
树的实现及其应用

树的实现及其应用树(Tree)是一种非常重要的数据结构,它在计算机科学中有着广泛的应用。
树是由节点(Node)和边(Edge)组成的一种层次结构,其中一个节点可以有零个或多个子节点。
树结构中最顶层的节点称为根节点(Root),最底层的节点称为叶节点(Leaf),除了根节点外,每个节点有且仅有一个父节点。
一、树的基本概念在树的结构中,每个节点可以有多个子节点,这些子节点又可以有自己的子节点,以此类推,形成了树的层次结构。
树的基本概念包括以下几个要点:1. 根节点(Root):树结构的最顶层节点,没有父节点。
2. 叶节点(Leaf):树结构的最底层节点,没有子节点。
3. 父节点(Parent):一个节点的直接上级节点。
4. 子节点(Child):一个节点的直接下级节点。
5. 兄弟节点(Sibling):具有相同父节点的节点互为兄弟节点。
6. 子树(Subtree):树中的任意节点和它的子节点以及这些子节点的子节点构成的子树。
7. 深度(Depth):从根节点到某个节点的唯一路径的边的数量。
8. 高度(Height):从某个节点到叶节点的最长路径的边的数量。
二、树的实现树的实现可以通过多种方式来完成,其中最常见的是使用节点和指针的方式来表示树结构。
在实际编程中,可以通过定义节点类(NodeClass)来表示树的节点,然后通过指针来连接各个节点,从而构建出完整的树结构。
下面是一个简单的树节点类的示例代码:```pythonclass TreeNode:def __init__(self, value):self.value = valueself.children = []```在上面的示例中,TreeNode类表示树的节点,每个节点包含一个值(value)和一个子节点列表(children)。
通过不断地创建节点对象并将它们连接起来,就可以构建出一棵完整的树。
三、树的遍历树的遍历是指按照一定顺序访问树中的所有节点。
树的应用与实现课程设计

树的应用与实现课程设计一、课程目标知识目标:1. 学生能理解树的基本概念、性质和存储结构;2. 学生能掌握树的基本操作,如插入、删除、遍历等;3. 学生能了解并掌握树在实际问题中的应用,如二叉排序树、平衡树等;4. 学生能理解并掌握常见的树状数据结构,如堆、并查集等。
技能目标:1. 学生能运用所学知识解决实际问题,具备一定的算法分析与设计能力;2. 学生能通过编程实践,熟练掌握树的相关操作;3. 学生能运用树状数据结构优化问题解决方案,提高解决问题的效率。
情感态度价值观目标:1. 学生对数据结构产生浓厚的兴趣,树立学习自信;2. 学生在团队合作中,培养沟通、协作和解决问题的能力;3. 学生在学习过程中,认识到数据结构在实际应用中的价值,增强学习的积极性。
课程性质:本课程为计算机科学与技术专业选修课程,旨在帮助学生掌握树状数据结构的基本知识,提高解决实际问题的能力。
学生特点:学生已具备一定的编程基础和逻辑思维能力,对数据结构有一定了解,但可能对树的具体应用和实现尚不熟悉。
教学要求:注重理论与实践相结合,强调学生的动手实践能力,培养学生解决实际问题的能力。
通过案例分析、课堂讨论等形式,提高学生的参与度和兴趣。
在教学过程中,关注学生的个体差异,因材施教,确保课程目标的达成。
二、教学内容1. 树的基本概念:树的定义、基本术语(如节点、边、路径、深度、高度、层等)。
2. 树的存储结构:顺序存储、链式存储(二叉链表、线索二叉树)。
3. 树的基本操作:树的创建、插入、删除、遍历(前序、中序、后序、层序)。
4. 特殊树及其应用:- 二叉树:二叉树的性质、满二叉树、完全二叉树、二叉排序树、平衡二叉树(AVL树);- 堆:最大堆、最小堆、堆的插入、删除;- 并查集:并查集的概念、初始化、查找、合并。
5. 树在实际问题中的应用:分析树状结构在算法优化、数据组织等方面的作用,如 Huffman编码、文件系统等。
教学内容安排和进度:第一周:树的基本概念、存储结构;第二周:树的基本操作;第三周:二叉树及其性质;第四周:二叉排序树、平衡二叉树;第五周:堆、并查集;第六周:树在实际问题中的应用案例分析。
树的应用数据结构中的实际案例分析
树的应用数据结构中的实际案例分析树(Tree)是一种非常重要的数据结构,它在各个领域都有广泛的应用。
本文将以实际案例的方式,分析树结构在数据管理、网络通信和图形图像处理领域的应用,以展示树的实际应用价值。
一、数据管理中的树应用案例1. 文件系统中的目录结构在操作系统中,文件系统通常采用树的结构来组织文件和目录。
每个文件或目录都是树中的节点,而它们之间的层次关系就构成了一个树结构。
通过树的遍历算法,我们可以方便地进行文件的查找、增加、删除和修改等操作,提高了文件系统的管理效率。
2. 数据库中的索引数据库系统中,常常需要对数据进行快速检索。
为了提高检索效率,通常使用B树或B+树来构建索引。
这些树结构可以快速定位到存储数据的位置,大大加快了数据库的查询速度。
二、网络通信中的树应用案例1. 网络路由协议在网络通信中,路由器通过路由协议来决定数据包的传输路径。
常用的路由协议,如OSPF和BGP,都采用了基于树的算法。
通过构建树状的路由表,路由器可以根据目的IP地址快速确定数据包的下一跳路径,实现了高效的网络通信。
2. 网页链接结构互联网上的网页链接结构也可以看作一种树结构。
每个网页可以看作一个节点,而网页之间的超链接关系则构成了树状结构。
通过网页中的树遍历算法,搜索引擎可以快速索引和抓取网页内容,为用户提供准确的搜索结果。
三、图形图像处理中的树应用案例1. 游戏中的场景管理在游戏开发中,场景管理是一个重要的任务。
常常使用场景树来管理游戏中的各个场景。
每个场景都是树中的一个节点,而场景之间的层次关系和跳转关系则构成了一个树结构。
通过树的遍历和搜索等算法,游戏引擎可以方便地进行场景的切换和管理。
2. 图像分析中的分割与分类在图像处理领域,常常需要对图像进行分割和分类。
为了实现自动化分析,可以使用树结构来表示图像的区域关系。
通过树的遍历算法和图像特征提取,可以实现对图像的自动分割和分类,提高了图像处理的效率和准确性。
树的操作实验报告
实验名称:树的操作实验实验目的:1. 理解树的基本概念和操作。
2. 掌握树的创建、插入、删除、查找等基本操作。
3. 熟悉树在计算机科学中的应用。
实验环境:1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse实验内容:1. 树的基本概念2. 树的创建3. 树的插入4. 树的删除5. 树的查找6. 树的应用实验步骤:一、树的基本概念1. 树的定义:树是一种非线性数据结构,由若干节点组成,每个节点有一个唯一的父节点(根节点除外),除了根节点外,其他节点都有一个子节点。
2. 树的术语:- 节点:树中的数据元素。
- 父节点:节点的直接前驱节点。
- 子节点:节点的直接后继节点。
- 根节点:没有父节点的节点。
- 叶节点:没有子节点的节点。
- 节点的度:节点拥有的子节点个数。
- 树的深度:根节点到叶节点的最长路径长度。
二、树的创建1. 创建二叉树:```javapublic class BinaryTree {private TreeNode root;public BinaryTree() {root = null;}public void createTree(int[] data) {if (data == null || data.length == 0) {return;}root = new TreeNode(data[0]);int i = 1;Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root);while (!queue.isEmpty()) {TreeNode node = queue.poll();if (i < data.length && data[i] != 0) {node.left = new TreeNode(data[i]); queue.offer(node.left);i++;}if (i < data.length && data[i] != 0) { node.right = new TreeNode(data[i]); queue.offer(node.right);i++;}}}}```2. 创建二叉搜索树:```javapublic class BinarySearchTree {private TreeNode root;public BinarySearchTree() {root = null;}public void createTree(int[] data) {if (data == null || data.length == 0) {return;}for (int i = 0; i < data.length; i++) {root = insert(root, data[i]);}}private TreeNode insert(TreeNode node, int data) { if (node == null) {return new TreeNode(data);}if (data < node.data) {node.left = insert(node.left, data);} else if (data > node.data) {node.right = insert(node.right, data);}return node;}}```三、树的插入1. 在二叉树中插入节点:```javapublic void insert(TreeNode node, int data) {if (node == null) {return;}if (data < node.data) {insert(node.left, data);} else if (data > node.data) {insert(node.right, data);}}```2. 在二叉搜索树中插入节点:```javaprivate TreeNode insert(TreeNode node, int data) { if (node == null) {return new TreeNode(data);}if (data < node.data) {node.left = insert(node.left, data);} else if (data > node.data) {node.right = insert(node.right, data);}return node;}```四、树的删除1. 在二叉树中删除节点:```javapublic void delete(TreeNode node, int data) {if (node == null) {return;}if (data < node.data) {delete(node.left, data);} else if (data > node.data) {delete(node.right, data);} else {if (node.left == null && node.right == null) { node = null;} else if (node.left == null) {node = node.right;} else if (node.right == null) {node = node.left;} else {TreeNode minNode = findMin(node.right);node.data = minNode.data;delete(node.right, minNode.data);}}}```2. 在二叉搜索树中删除节点:```javaprivate TreeNode delete(TreeNode node, int data) {if (node == null) {return null;}if (data < node.data) {node.left = delete(node.left, data);} else if (data > node.data) {node.right = delete(node.right, data);} else {if (node.left == null && node.right == null) { node = null;} else if (node.left == null) {node = node.right;} else if (node.right == null) {node = node.left;} else {TreeNode minNode = findMin(node.right);node.data = minNode.data;node.right = delete(node.right, minNode.data); }}return node;}```五、树的查找1. 在二叉树中查找节点:```javapublic TreeNode search(TreeNode node, int data) {if (node == null) {return null;}if (data == node.data) {return node;} else if (data < node.data) {return search(node.left, data);} else {return search(node.right, data);}}```2. 在二叉搜索树中查找节点:```javapublic TreeNode search(TreeNode node, int data) {if (node == null) {return null;}if (data == node.data) {return node;} else if (data < node.data) {return search(node.left, data);} else {return search(node.right, data);}}```六、树的应用1. 堆排序:利用二叉堆的属性,实现高效排序。
数据结构实验报告及心得体会
数据结构实验报告及心得体会一、引言数据结构是计算机科学中的重要基础课程,通过实验环节的学习,我们能够更好地掌握和应用数据结构的概念、算法和操作。
本报告旨在总结和分享我们进行的数据结构实验,并提出相应的心得体会。
二、实验一:线性表的实现与应用1. 实验目的本实验旨在通过实现和应用线性表的基本操作,掌握线性表的存储结构和算法。
2. 实验内容我们选择了顺序表和链表两种线性表的实现方式,并实现了插入、删除和查找等基本操作。
通过实验,我们发现顺序表适用于元素个数较少、频繁查找的情况,而链表适用于插入和删除操作较多、元素个数不确定的情况。
3. 实验心得通过实验一,我们深刻认识到数据结构的不同实现方式对算法的影响。
选择合适的数据结构可以提高算法效率,提高程序的性能。
同时,我们也意识到了在实际应用中,根据问题的具体特点选择不同的数据结构才能得到最优解。
三、实验二:栈与队列的应用本实验旨在通过实现和应用栈和队列的基本操作,掌握栈和队列的特性及其在实际应用中的作用。
2. 实验内容我们分别实现了顺序栈、链式栈、顺序队列和链式队列,并实现了入栈、出栈、入队和出队等基本操作。
我们发现栈适用于实现回溯算法、递归算法等,而队列适用于广度优先搜索、线程池等场景。
3. 实验心得通过实验二,我们进一步理解了栈和队列在实际编程中的运用。
它们提供了方便的数据结构,帮助我们解决了许多实际问题。
同时,实验过程中,我们也发现了栈溢出的问题,意识到了合理管理栈空间的重要性。
四、实验三:树与二叉树的实现与应用1. 实验目的本实验旨在通过实现和应用树和二叉树的基本操作,掌握树和二叉树的存储结构和算法。
2. 实验内容我们实现了树和二叉树的基本操作,包括创建、插入、删除和遍历等。
通过实验,我们发现树在表示具有部分层次结构的问题时更合适,而二叉树在表示递归结构时更加方便。
通过实验三,我们深入理解了树和二叉树的特性及其应用。
树和二叉树是许多高级数据结构的基础,熟练掌握它们的操作对于解决实际问题非常重要。
计算机科学-树的应用
}
无根树的深度优先遍历
void dfs(int x,int fa)
{
visit(x); // 在访问x 的儿子前做一些事
for(int i=fi[x];i;i=ne[i])
if(to[i]!=fa) dfs(to[i],x)
····
// 在访问x 的儿子后做一些事
}
应用1:求子树大小和高度
问题描述: 求树中每棵子树的大小以及每个结点的深度(
if(u[x]==0)return; ch[x][0]=v[u[x]]; ss(v[u[x]]); int pre=v[u[x]]; for(int i=p[u[x]];i;i=p[i]){
ch[pre][1]=v[i]; ss(v[i]); pre=v[i]; } }
二、树的深度优先遍历
• 有根树的深度优先遍历 • 无根树的深度优先遍历 • 深度优先遍历的简单应用
有根树的深度优先遍历
int m,fi[MaxN],to[MaxN*2],ne[MaxN*2];
void dfs(int x)
{
visit(x);
// 在访问x的儿子前做一些事
for(int i=fi[x];i;i=ne[i])
dfs(to[i]); // 访问 x 的儿子
····
// 在访问x的儿子后做一些事
假设结点1为根)。
输入格式: 第1行,一个整数n,表示树的结点个数。 接下来n-1行,每行两个整数x和y,表示结点x和结点y之
完全二叉树数组表示
A
B
C
D EF G
HI
int tree[MaxN];
123456789 AB CDE F GHI
(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北水利水电学院数据结构实验报告2012~2013学年第一学期2010级计算机科学与技术专业班级:2010134 学号:201013418 姓名:杨学成实验三树的应用一、实验题目:树的应用——哈夫曼编码二、实验内容:利用哈夫曼编码进行通信可以大大提高信道的利用率,缩短信息传输的时间,降低传输成本。
根据哈夫曼编码的原理,编写一个程序,在用户输入结点权值的基础上求哈夫曼编码。
从键盘输入若干字符及每个字符出现的频率,将字符出现的频率作为结点的权值,建立哈夫曼树,求出各字符的哈夫曼编码。
要求:1.输出存放哈夫曼树的数组HT的初态和终态;2.输出每个字符的哈夫曼编码;3.输入由上述若干字符组成的字符串,对电文进行编码并输出;4.(选作)输入电文的哈夫曼编码,进行译码并输出。
三、程序源代码:#include <iostream.h>#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct{char date;int weight;int parent,lchild,rchild;}HTNode ,*HuffmanTree;typedef char * *HuffmanCode;void Select(HuffmanTree HT,int i,int &s1,int &s2){int m1,m2,k;m1=m2=10000;s1=s2=0;for (k=1;k<=i;k++){if((HT[k].parent==0)&&(HT[k].weight<m1)){m2=m1;s2=s1;m1=HT[k].weight;s1=k;}else if((HT[k].parent==0)&&(HT[k].weight<m2)){m2=HT[k].weight;s2=k;}}}void main (){char str[81],str2[81];HuffmanTree HT;HuffmanCode HC;int w[81], n,i,s1,s2,m,c,f;printf ("请输入编码字符的个数:");scanf("%d",&n);printf("\n编码字符:");cin>>str;printf("\n请输入字符对应的权重:");for (i=0;i<n;i++){scanf("%d",&w[i]);}if(n<=1) return;m=2*n-1;HT=(HuffmanTree) malloc ((m+1)*sizeof(HTNode));for(i=1;i<=n;++i){HT[i].date=str[i-1];HT[i].weight=w[i-1];HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;}for(;i<=m;++i){HT[i].date='-';HT[i].weight=0;HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;}cout<<" HT的初态"<<endl;cout<<"-------------------------------------------------------------"<<endl;cout<<" date weight parent lchild rchild"<<endl;cout<<"-------------------------------------------------------------"<<endl;for(i=1;i<=m;i++){printf("%4c %4d %4d %4d %4d\n" ,HT[i].date,HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild);cout<<"-----------------------------------------------------------"<<endl;}for (i=n+1;i<=m;++i){Select(HT,i-1,s1,s2);HT[s1].parent=i;HT[s2].parent=i;HT[i].lchild=s1;HT[i].rchild=s2;HT[i].weight=HT[s1].weight+HT[s2].weight;}cout<<" HT的终态"<<endl;cout<<"-------------------------------------------------------------"<<endl;cout<<" date weight parent lchild rchild"<<endl;cout<<"-------------------------------------------------------------"<<endl;for(i=1;i<=m;i++){printf("%4c %4d %4d %4d %4d\n" ,HT[i].date,HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild);cout<<"-------------------------------------------------------------"<<endl;}HC=(HuffmanCode)malloc((n+1)*sizeof(char *));char *cd=(char *)malloc(n*sizeof(char));cd[n-1]='\0';for (i=1;i<=n;++i)int start=n-1;for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent) if(HT[f].lchild==c)cd[--start]='0';else cd[--start]='1';HC[i]=(char *) malloc ((n-start)*sizeof(char));strcpy(HC[i],&cd[start]);}free(cd);cout<<"字符的编码"<<endl;for (i=1;i<=n;i++){printf("%c : %s\n",HT[i].date,HC[i]);}printf("请输入上述字符组成的任何字符串:");cin>>str2;for (i=0;str2[i]!='\0';i++){for (int j=1;j<=n;j++){if (str2[i]==HT[j].date)cout<<HC[j];}}cout<<endl<<"请输入哈夫曼电文的编码:";cin>>str2;char str4[81];int k=0,tr=0;for (i=0;str2[i]!='\0';i++)int a=i, t=0;char str3[81];tr=0;str3[t]=str2[i];t++;str3[t]='\0';for(;strlen(str3)<n;){for (int j=1;j<=n;j++){if( strcmp(str3,HC[j])==0){str4[k]=HT[j].date;k++;tr=1;}}if (tr==1)break;i++;str3[t]=str2[i];t++;str3[t]='\0';}}if (tr==0){cout<<"It is error.";str4[k]='\0';}else{str4[k]='\0';cout<<str4;}cout<<endl;}四、测试结果:五、小结(包括收获、心得体会、存在的问题及解决问题的方法、建议等)注:内容一律使用宋体五号字,单倍行间距对我来说,数据结构这门课还是有点难度。
因为以前自己不动手写程序,现在写往往最基本的编程语言我都不会写,需要问同学。
这次试验很早就准备了,在上机实验前我就用了大概周末两天时间把它做完了。
当然很多不会的都是问我的同学,但都是我自己写的。
做实验前先把书看了一遍,但做的时候依然有些困难,倒不是那些算法的问题,因为算法书上都有,主要是逻辑和一些基本的对象连接的问题。
做这道题我大的逻辑是有的,但具体到很多小的问题我就不清楚了。
因为编程语言学的不好,所以不敢调用函数,一个主函数就把所有的问题都包括了,所以结构不是很好。
原来以为第四问比较好做,我同学也告诉我做完第二小题后面的都很简单,结果我做的时候发现在四道小题里面第四题还是比较难实现。
尝试做了几个小时才把第四问循环的时候出现的各种问题解决掉。
后来发现赫夫曼电文编码输入错误的概率很小,忘记了判断错误,最后才加上判错。
一直想抽时间把这个程序改成函数调用,但时间一久就不了了之了。
因为这次试验当时实验做完没有写小结,现在好多细节不记得了,望老师见谅。
(完)。