1.树的存储结构说明


定义的结构体中,name是用于存放文件名称,string类型是字符串类型,定义了child孩子结点和brother兄弟结点。

2.树的函数说明

1.main函数


main函数中主要实现的功能是打开文件并且把功能函数进行拼接(int number没有实质性用处,可以忽略掉)。首先就是对各种变量的定义了,定义文件名,指针,并且对指针进行动态内存分配。接下来打开文件,并且执行建树和插入结点操作。然后输出节点位置并且找出其对应的路径。

2.CreatTree函数


CreatTree函数的功能主要是对main函数中读出的文件名生成一棵数进行存储,首先定义的是catalog和s1变量,s1变量就是对文件名进行读取和存储,是建树操作的主要字符串定义,而catalog的功能就比较玄妙了,它的定义是防止保存完名称之后s1消失,这个在后面调试遇到的问题里面会提到。接下来的index变量是对文件名的读取开关,也就是当循环变量1=index时进行读取,读取到“/"的出现时再停止读取,此时为了读取下一个文件名,把指针后移,也就是index=i+1。由于使用的遍历方法是层次遍历,所以读完之后如果判断brother为NULL,那么就移动至尾部,在读完一层的时候需要把指针指向child也就是下一层。由于最后一个文件的特殊性,没有"/"作为停止开关,所以定义了s2对最后一个文件名的读取和存入,同样的catalog用于防止s2消失。总的来说本函数的主要功能就是读取文件名和建树。

Insert函数


Insert函数的作用是把建好的数插入节点进去,首先进行判断目录名是否存在,若存在直接返回不需要插入,若不存在则进行遍历插入,具体操作如图所示。这个函数相对简单一些,所以不进行太多的介绍。

Print函数

Print函数用于输出节点,使用的方法是递归法则,首先放置一个判断是否到递归口,是则返回,不是则继续递归遍历,使用for循环进行输出空格,使其具有每一个层次,在输出名称,最后进行递归。这个函数的难度在于对空格多少以及递归和space变量的运用,space变量的作用在于判断每个名称之前的空格需要多少。

FindRoad函数


最后一个函数是FindRoad找路径函数,顾名思义就是找到main函数里面输入的文件x并且把它的路径输出,这个函数的判断比较多,首先进行的两个判断,若bt->brother->name为要查找名称,则不输出,因为需要查找的结点与bt->brother在同一层。接下来两个判断同上,运用的是递归,判断的跟上面的两个if是一样的。这个函数刚开始思路错误了,以至于修改了有段时间后面又开始重写,所以耽误的比较长的时间,后面的删除函数也没写下去。

3.树结果演示

4.碰到问题

由于是大作业所以碰到的问题还是蛮多的,首先是各个函数在单独写的时候,出现了不一样的问题。先说说主函数吧,在实现主函数的时候,刚开始定义了很多的变量,应为对函数中的递归不了解,所以用了for循环,但是后面在同学的指导下,直接改成打开文件,然后把相应的函数插进去,不需要再进行其他的操作,也是方便了很多。然后就是Print函数了,这个函数当初设计的时候没有注意到空格的输出,导致层次关系看起来很混乱,之后在百度上查找了相应的代码和分析,重新定义了一个space变量用于决定空格的多少。最后一个就是FindRoad函数了,这个函数在一开始设计的时候思路错误,导致整个树的路径都无法被查找和找到,后面修改了一下,换了一个方向去写, 直接用递归加上判读来实现查找路径,就方便了很多。

5.小结

本次作业好的地方就是代码的运行上,基本的功能都有实现,而且每个函数对应的功能和思路都比较清晰,出现运行错误的地方也比较少,整体的实现方面和代码量方面都是比较好的。不足的地方在于相对有些功能还是可以继续去完善和修改,比如可以增加一个删除节点的函数,这个函数相对其他函数会复杂的多。插入之后也可以写进去一个查看的片段,查看插入之后的树的结构。总之感谢组内的所有同学的辛苦付出,也感谢老师对大作业的肯定和点评。

6.小组成员分配说明

小组成员:陈梓灿(队长)曾俊伟 王鑫杰 张伟龙 林炜 周秋斌 周仁杰

参与内容:

1.main:林炜
2.CreatTree和Insert:陈梓灿 王鑫杰
3.Print:周秋斌 张伟龙
4.FindRoad:曾俊伟 周仁杰
贡献度:主要贡献者 陈梓灿
最后得分:暂时未知

7.photo

DS博客大作业--树 (陈梓灿组)的更多相关文章

  1. DS博客大作业--树(李天明组)

    DS博客大作业--树 大作业博客要求 (10分) 1.树的存储结构说明 .树采用的是链式存储结构. .这段代码中定义了两个结构体.第一个是自定义为Name类型的结构体,里面的成员有字符串str和类型为 ...

  2. DS博客大作业--树

    1.树的存储结构说明 树节点结构体 data:文件名 brother:兄弟节点 child:孩子节点 type:节点的类型,0为文件,1为目录 h:节点所在的层次 2.树的函数说明 头文件 函数1:C ...

  3. DS博客作业——树

    DS博客作业--树 1.本周学习总结 1.思维导图 2.谈谈你对树结构的认识及学习体会. 在树这一章节,我们学习的是二叉树的算法. 树的构建:一种是直接给树的顺序存储结构的字符串,一种是通过先序遍历和 ...

  4. DS博客作业08--课程总结

    DS博客作业08--课程总结 1.当初你是如何做出选择计算机专业的决定的? 1.1 经过一年学习,你的看法改变了么,为什么? 1.2 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 1. ...

  5. DS博客作业--07查找

    目录 DS博客作业--07查找 1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 2.1.题目1:6-1 二叉搜索树的操作集 (30 分 ...

  6. DS博客作业05--查找

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业05--查找 这个作业的目标 学习查找的相关结构 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1.1 ...

  7. DS博客作业03--树

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业03--树 这个作业的目标 学习树结构设计及运算操作 姓名 黄静 目录 0. PTA得分截图 1. 本周学习总结 ...

  8. DS博客作业04--图

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业04--图 这个作业的目标 学习图结构设计及相关算法 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1. ...

  9. DS博客作业04--树大作业说明

    大作业题目说明 1.目录树 按照如下目录路径,设计一颗目录树保存.并能实现对目录树遍历.目录路径存在file.txt,格式如下: b.txt c\ ab\cd.txt a\bc.txt ab\d.tx ...

随机推荐

  1. 实现Promise类

    基本使用: let promise = new Promise((resolve, reject) => { // do something if (true) { resolve('succe ...

  2. iis 8.0 HTTP 错误 404.3 server 2012

    最近在学习WCF,发现将网站WCF服务放到IIS上时不能正常运行,从网上搜了一下: 解决方法,以管理员身份进入命令行模式,运行: "%windir%\Microsoft.NET\Framew ...

  3. 关于memset的几个易错点

    memset(void *s,int ch,size_t n); 作用:将s中当前位置后面的n个字节用 ch 替换并返回 s 注意这里是“字节”而非单位长度,memset不会考虑各个类型的单位长度,只 ...

  4. RSA 加密长度计算公式

    The length of data that can be encrypted using RSA is determined primarily by the size of the key yo ...

  5. SSM处理 No 'Access-Control-Allow-Origin' header is present on the requested resource 问题

    在开发中,前端同事调用后端同事写好的接口,在地址中是有效的,但在项目的ajax中,浏览器会报 "No 'Access-Control-Allow-Origin' header is pres ...

  6. 关于gitlab+jenkins自动部署代码的实现

    本人PHP开发者,项目组大多是PHP,少量java项目. 因公司目前服务器和项目的管理比较混乱,与领导商量后,决定尝试 gitlab+jenkins自动化部署(之前用的svn FTP手动部署代码),解 ...

  7. (转) Linux安装启动FTP服务

    Linux安装启动FTP服务 Linux服务器默认是没有开启FTP服务的.也没有FTP服务器,为了文件的传输需要用到FTP服务器,以典型的vsftpd为例.vsftpd作为FTP服务器,在Linux系 ...

  8. win10上使用自带的Hyper-V安装虚拟机

    Hyper-V管理器,新建虚拟机,安装了.iso系统,但启动报错,电脑上联想G40-70,都说在bios设置的security里开启硬件虚拟化选项,可我security里没有虚拟化相关选项, 后来在 ...

  9. 多线程-生产者消费者(synchronized同步)

    正解博客:https://blog.csdn.net/u011863767/article/details/59731447 永远在循环(loop)里调用 wait 和 notify,不是在 If 语 ...

  10. 面试题:Dubbo中zookeeper做注册中心,如果注册中心集群全都挂掉,发布者和订阅者之间还能通信么?

    1.[提供者]在[启动]时,向注册中心zk [注册]自己提供的服务. 2.[消费者]在[启动]时,向注册中心zk [订阅]自己所需的服务.   可以的,消费者在启动时,消费者会从zk拉取注册的生产者的 ...