定义的结构体中,name是用于存放文件名称,string类型是字符串类型,定义了child孩子结点和brother兄弟结点。函数
main函数中主要实现的功能是打开文件而且把功能函数进行拼接(int number没有实质性用处,能够忽略掉)。首先就是对各类变量的定义了,定义文件名,指针,而且对指针进行动态内存分配。接下来打开文件,而且执行建树和插入结点操做。而后输出节点位置而且找出其对应的路径。spa
CreatTree函数的功能主要是对main函数中读出的文件名生成一棵数进行存储,首先定义的是catalog和s1变量,s1变量就是对文件名进行读取和存储,是建树操做的主要字符串定义,而catalog的功能就比较玄妙了,它的定义是防止保存完名称以后s1消失,这个在后面调试遇到的问题里面会提到。接下来的index变量是对文件名的读取开关,也就是当循环变量1=index时进行读取,读取到“/"的出现时再中止读取,此时为了读取下一个文件名,把指针后移,也就是index=i+1。因为使用的遍历方法是层次遍历,因此读完以后若是判断brother为NULL,那么就移动至尾部,在读完一层的时候须要把指针指向child也就是下一层。因为最后一个文件的特殊性,没有"/"做为中止开关,因此定义了s2对最后一个文件名的读取和存入,一样的catalog用于防止s2消失。总的来讲本函数的主要功能就是读取文件名和建树。设计
Insert函数的做用是把建好的数插入节点进去,首先进行判断目录名是否存在,若存在直接返回不须要插入,若不存在则进行遍历插入,具体操做如图所示。这个函数相对简单一些,因此不进行太多的介绍。指针
Print函数用于输出节点,使用的方法是递归法则,首先放置一个判断是否到递归口,是则返回,不是则继续递归遍历,使用for循环进行输出空格,使其具备每个层次,在输出名称,最后进行递归。这个函数的难度在于对空格多少以及递归和space变量的运用,space变量的做用在于判断每一个名称以前的空格须要多少。调试
最后一个函数是FindRoad找路径函数,顾名思义就是找到main函数里面输入的文件x而且把它的路径输出,这个函数的判断比较多,首先进行的两个判断,若bt->brother->name为要查找名称,则不输出,由于须要查找的结点与bt->brother在同一层。接下来两个判断同上,运用的是递归,判断的跟上面的两个if是同样的。这个函数刚开始思路错误了,以致于修改了有段时间后面又开始重写,因此耽误的比较长的时间,后面的删除函数也没写下去。blog
因为是大做业因此碰到的问题仍是蛮多的,首先是各个函数在单独写的时候,出现了不同的问题。先说说主函数吧,在实现主函数的时候,刚开始定义了不少的变量,应为对函数中的递归不了解,因此用了for循环,可是后面在同窗的指导下,直接改为打开文件,而后把相应的函数插进去,不须要再进行其余的操做,也是方便了不少。而后就是Print函数了,这个函数当初设计的时候没有注意到空格的输出,致使层次关系看起来很混乱,以后在百度上查找了相应的代码和分析,从新定义了一个space变量用于决定空格的多少。最后一个就是FindRoad函数了,这个函数在一开始设计的时候思路错误,致使整个树的路径都没法被查找和找到,后面修改了一下,换了一个方向去写, 直接用递归加上判读来实现查找路径,就方便了不少。递归
本次做业好的地方就是代码的运行上,基本的功能都有实现,并且每一个函数对应的功能和思路都比较清晰,出现运行错误的地方也比较少,总体的实现方面和代码量方面都是比较好的。不足的地方在于相对有些功能仍是能够继续去完善和修改,好比能够增长一个删除节点的函数,这个函数相对其余函数会复杂的多。插入以后也能够写进去一个查看的片断,查看插入以后的树的结构。总之感谢组内的全部同窗的辛苦付出,也感谢老师对大做业的确定和点评。内存
1.main:林炜
2.CreatTree和Insert:陈梓灿 王鑫杰
3.Print:周秋斌 张伟龙
4.FindRoad:曾俊伟 周仁杰
贡献度:主要贡献者 陈梓灿
最后得分:暂时未知字符串