DS博客大作业--树 (陈梓灿组)
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博客大作业--树 (陈梓灿组)的更多相关文章
- DS博客大作业--树(李天明组)
DS博客大作业--树 大作业博客要求 (10分) 1.树的存储结构说明 .树采用的是链式存储结构. .这段代码中定义了两个结构体.第一个是自定义为Name类型的结构体,里面的成员有字符串str和类型为 ...
- DS博客大作业--树
1.树的存储结构说明 树节点结构体 data:文件名 brother:兄弟节点 child:孩子节点 type:节点的类型,0为文件,1为目录 h:节点所在的层次 2.树的函数说明 头文件 函数1:C ...
- DS博客作业——树
DS博客作业--树 1.本周学习总结 1.思维导图 2.谈谈你对树结构的认识及学习体会. 在树这一章节,我们学习的是二叉树的算法. 树的构建:一种是直接给树的顺序存储结构的字符串,一种是通过先序遍历和 ...
- DS博客作业08--课程总结
DS博客作业08--课程总结 1.当初你是如何做出选择计算机专业的决定的? 1.1 经过一年学习,你的看法改变了么,为什么? 1.2 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 1. ...
- DS博客作业--07查找
目录 DS博客作业--07查找 1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 2.1.题目1:6-1 二叉搜索树的操作集 (30 分 ...
- DS博客作业05--查找
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业05--查找 这个作业的目标 学习查找的相关结构 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1.1 ...
- DS博客作业03--树
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业03--树 这个作业的目标 学习树结构设计及运算操作 姓名 黄静 目录 0. PTA得分截图 1. 本周学习总结 ...
- DS博客作业04--图
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业04--图 这个作业的目标 学习图结构设计及相关算法 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1. ...
- DS博客作业04--树大作业说明
大作业题目说明 1.目录树 按照如下目录路径,设计一颗目录树保存.并能实现对目录树遍历.目录路径存在file.txt,格式如下: b.txt c\ ab\cd.txt a\bc.txt ab\d.tx ...
随机推荐
- 实现Promise类
基本使用: let promise = new Promise((resolve, reject) => { // do something if (true) { resolve('succe ...
- iis 8.0 HTTP 错误 404.3 server 2012
最近在学习WCF,发现将网站WCF服务放到IIS上时不能正常运行,从网上搜了一下: 解决方法,以管理员身份进入命令行模式,运行: "%windir%\Microsoft.NET\Framew ...
- 关于memset的几个易错点
memset(void *s,int ch,size_t n); 作用:将s中当前位置后面的n个字节用 ch 替换并返回 s 注意这里是“字节”而非单位长度,memset不会考虑各个类型的单位长度,只 ...
- RSA 加密长度计算公式
The length of data that can be encrypted using RSA is determined primarily by the size of the key yo ...
- SSM处理 No 'Access-Control-Allow-Origin' header is present on the requested resource 问题
在开发中,前端同事调用后端同事写好的接口,在地址中是有效的,但在项目的ajax中,浏览器会报 "No 'Access-Control-Allow-Origin' header is pres ...
- 关于gitlab+jenkins自动部署代码的实现
本人PHP开发者,项目组大多是PHP,少量java项目. 因公司目前服务器和项目的管理比较混乱,与领导商量后,决定尝试 gitlab+jenkins自动化部署(之前用的svn FTP手动部署代码),解 ...
- (转) Linux安装启动FTP服务
Linux安装启动FTP服务 Linux服务器默认是没有开启FTP服务的.也没有FTP服务器,为了文件的传输需要用到FTP服务器,以典型的vsftpd为例.vsftpd作为FTP服务器,在Linux系 ...
- win10上使用自带的Hyper-V安装虚拟机
Hyper-V管理器,新建虚拟机,安装了.iso系统,但启动报错,电脑上联想G40-70,都说在bios设置的security里开启硬件虚拟化选项,可我security里没有虚拟化相关选项, 后来在 ...
- 多线程-生产者消费者(synchronized同步)
正解博客:https://blog.csdn.net/u011863767/article/details/59731447 永远在循环(loop)里调用 wait 和 notify,不是在 If 语 ...
- 面试题:Dubbo中zookeeper做注册中心,如果注册中心集群全都挂掉,发布者和订阅者之间还能通信么?
1.[提供者]在[启动]时,向注册中心zk [注册]自己提供的服务. 2.[消费者]在[启动]时,向注册中心zk [订阅]自己所需的服务. 可以的,消费者在启动时,消费者会从zk拉取注册的生产者的 ...