此次是作的目录树,想到这个能够和python的目录爬取结合起来用,就想着搞点好玩的,把网站的可见目录转化成树结构可视化python
因为没有对目录进行文件夹和文件的区分,因此结构体内容仍是比较少的,h是树的高度,永远方便后面树的图形化
函数
做者有话说:这个函数决定是使用队列来操做,由于目录名考虑到会重复,因此要把每个结果输出出来。将中序遍历和strcmp结合起来用达到查找目录的目的,每一次递归都会把当前目录名入队,方便后面输出的时候使用,而fromwho是用于判断当前节点是兄弟仍是孩子,方便将前一项的兄弟或者孩子置为空,查找到就会由用户选择是否要删除了,若是要删除就将他传入DeletePoint函数递归删除测试
做者有话说:
step 1:函数参数
传入函数的参数有二。一是树,二是文件指针。
这里采用的是递归法遍历树,咱们将文件的开关放在主函数当中,再将文件指针传到函数中,保证文件开关的正常运行。
step 2:树的遍历
这个函数的功能是将创建的树图形化输出到文件中。根据逻辑关系,在这里咱们要选取先序遍历。多叉树的先序遍历和二叉树遍历的写法是一致的,
只须要将左右孩子分别改为孩子与兄弟便可。
step 3:初步调试
在结构体的设计当中,为了便于图形化加入变量h,在这里的含义是目录等级。为了验证以上两个步骤正常实现,先直接输出到文件当中查看效果。利用T->h来控制tab的输出,可以初步看出目录的分级效果。
固然若是在遍历上的选择出现错误,在这里也能提前发现。
step 4:输出格式
这个函数比较麻烦的地方就在于它的格式控制。
在设计前,先打样估计设计想要的效果,再根据效果图寻找格式与Tree->h的数学逻辑关系。为了呈阶梯状图形化,将奇数级目录控制为纵向输出,偶数级目录控制为横向输出。再经过repeat和mark进一步控制横竖tab量动画
做者有话说:这是建树的核心函数,思路是这样的,先读取site中前面一个目录名,而后查找当前point的兄弟节点中是否有这个文件存在,若是有就令point等于这个节点,而后用front记录上一个节点,用frontFlag标记上一个节点是父母节点仍是兄弟节点继续循环,没有就建立一个节点初始化后插入,而后令point等于这个节点继续循环,直到字符串结束。在查找的使用利用strcmp的特性进行插入,就能够达到排序的目的。网站
做者有话说:原本想尝试用C语言来实现这个爬取网站的过程,可是想了想以为意义不大(实际上是不会),因此就用python的bs4库来实现,借用system函数调用系统命令执行py文件设计
做者有话说:很简单的一个后序遍历删除节点。3d
做者有话说:一行一行地读取raw_data.txt中地文件,而后偷懒的利用InsertPoint函数将每一行的Tree中去指针
做者有话说:原理仍是比较简单的,就是访问网址的源代码利用bs4提取出html中a标签的href元素,添加进list型的变量里面,而后再将这个网址传入函数当中,重复上述操做,实现简单递归爬取目录的一个过程,有些href元素比较刁钻,好比http://rasang.site/example,href里面只会有/example,这种状况我没有去考虑,因此也处理不了这种问题,毕竟此次做业的重心也不在这上面,只是稍微添加一点乐趣罢了调试
做者有话说:
进入界面后用户须要输入一个网址用来爬行目录,结果会保存为txt也会展现在界面上
爬取网址结束后须要用户根据上面的结果输入要查找的目录名字,若是找到了会询问用户是否要删除这个目录,删除后使用StoreTree函数就能够将结果更新保存到txt图形化结果中
解决办法:百度搜索样例本身学
解决办法:宏定义fromdad和frombro,用来标记上一个节点是谁
以下:
解决办法:在这里进行入队操做的时候不能使用先序的结构,不然路径是不对的,使用中序就能够解决,由于兄弟节点是不能直接入队的,只有孩子节点能够入队,这样才是一条路径
解决办法:考虑到函数有关乎文件的开关,所以一开始想经过非递归的形式进行遍历,可是代码比较赘余。最后选取递归的方法,并将文件的开关置外。
解决办法: 为了使函数更具弹性,即函数适用对象更普遍,要找到一个合适的数学逻辑关系进行格式控制。经过调试,而且增长条件判断语句控制格式。
先来讲说缺点:一个是在处理文件的时候没办法把文件和文件夹分开,这就致使要看后缀名来判断是否是文件夹。还有一个就是老师在最后展现课上说的,最后将结果输出到文件里面的时候重复地写入文件影响效率,在课上听老师说能够保存到同一个string类型变量里面的时候我才恍然大悟,string类型很灵活,大小不受限制,只要把全部语句都加进去,把回车也加进去,就能够实现一次性写入,这点我是真的没有想到。
再来讲说好的地方:自我以为比较好的一个地方是设置了fromdad和frombro的宏定义,用来区分插入和删除时上一个节点的类型,方便将后继置为NULL。
谢晓淞:
陈玲清:
参与内容:StoreTree函数的实现。
最终得分:
罗小川:
参与内容:DeletePoint函数的实现,展现PPT的制做。
最终得分:
霍淏华:
参与内容:将插入和查找的过程用动画演示出来,方便同窗理解。
最终得分:
鲁俊文:
参与内容:测试bug。理解代码
最终得分:
岳小钢:
参与内容:测试bug。理解代码
最终得分:
介绍小组成员、参与内容、贡献度、最后得分