DS博客作业04--树大作业
1.树的存储结构说明 ☀
结构体中包含目录名称、文件指针、兄弟指针、孩子指针、以及树的高度。
2.树的函数说明
2.1文件及函数声明
2.2函数说明
2.2.1 mian函数
- 主要功能:创建树根结点,一行一行地读取文件中的路径并建树,将树打印出来,并显示操作菜单便于实现各项功能。
- 设计思路:在一个循环结构中,先将建好的树打印出来,然后显示功能菜单,使用者通过输入choice来选择要对树进行的操作。利用循环结构,清屏命令,令使用者可以多次对树进行功能菜单中的操作——查找目录树中的文件、增加新路径、删除结点或子树,并且在进行相关操作后,可以查看树结构的变化。当使用者输入choice=0时,循环结束。
2.2.2 CreatTNode函数
- 主要功能:创建树结点。
- 设计思路:在创建一个新结点前,需要用new函数先开辟空间,然后将结点名称赋予结构体成员data,将该结点所位于的层高赋予结构体成员h,最后将其余成员置为空。
2.2.3 GreatPath函数
- 主要功能:创建路径
- 设计思路:在main函数中,文件中的路径将被存入字符串中一行一行地读入本函数。
本函数利用循环结构,读取路径中的每一个字符直到字符串path结束。在循环中,当读入的字符不为'\'时,表示读入的字符是目录名或文件名,利用一个小循环将字符逐个存入str,直到遇到‘\’或path为空,以str为结点名创建新结点。若当前字符为‘\’,表明新结点为目录,将新目录结点根据字母排序插入当前树;若path为空,表明新结点为文件,将新文件结点按字母排序插入当前树。注意在每次循环结束时,应消除每次循环时赋予str的值。
2.2.4 PrintTree函数
- 主要功能:打印树
- 设计思路:当层数等于0时,将root下的结点打印出来,当层数不等于0时,利用层数来控制输出树的格式,利用递归将整个树的所有结点打印出来。
2.2.5JudgePath函数
- 主要功能:判断路径是否存在
- 设计思路:本函数利用循环结构,读取路径中的每一个字符直到字符串path结束。在循环中,先将出现的字符作为结点名,利用一个小循环存入str,直到遇到‘\’或path为0。若遇到‘\’,表示该结点为目录,历遍该结点的下层的所有目录结点,若不存在与输入路径相同的目录,则return false。若path为0,表示该结点为文件,若不存在与输入路径相同的目录,则return false。循环继续,注意在每次循环结束时,应消除每次循环时赋予str的值。
2.2.6 PrintTree_inFile函数
- 主要功能:将操作后的目录以树的形式写入tree.txt文件中。
- 设计思路:过程与输出树的差不多,将输出改为写入文件。
2.2.7SeekPath函数
- 主要功能:查找目录树的文件并保存路径,并判断路径是否存在
- 设计思路:利用递归,从树的叶子结点找起,若遇到结点名与目标文件名相同,将当前树结点入栈,若遇到比栈顶树结点的层数要低的树结点,也将其入栈。若没遇到结点名与目标文件名相同则return false。
2.2.8SeekTNode函数
- 主要功能:判断结点是否存在
- 设计思路:利用递归,层层深入查找。
2.2.9DeleteTNode函数
- 主要功能:实现树结点的删除
- 设计思路:利用递归,找目标结点后,删除其分支。
3.树结果演示
3.1主页面
3.2查找目录树中的文件演示
3.3查找目录树中不存在的文件演示
3.4添加新路径演示
3.5添加已有路径演示
4.碰到问题
- Q1:
调试过程中一直出现空指针的错误,老是调试调试着就卡了 - R1:
因为没有对结点申请空间,就进行操作,导致访问权限越界, - A1:
进行节点申请空间(new) - Q2:
输出目录树并且把它写进文件里,这个部分也碰到了问题,一开始用空格代替那个格式进行控制,然后用递归,发现不是很懂递归口怎么写才能让它输出目录后,输出里面的文件,而不是继续输出目录 - A2:
已解决
5.小结
本次树大作业采用小组形式进行,能力较弱的同学可以在与大佬讨论的过程中学到不少有用经验,通过阅读他人的代码,来改进自己以往编程时不太高明的做法。
我们组完成的是目录树,先设计好结构体,制定一个框架,然后再逐步完善各个函数。了解如何使用好递归口是写代码过程中重要的一点,函数的命名,适当添加注释更是重中之重。
6.小组成员分配说明
小组成员 | 参与内容 | 贡献度 | 最后得分 |
---|---|---|---|
黄雅静 | 写代码 | kkk | kkk |
赖慧颖 | 写代码 | kkk | kkk |
钟海清 | 写框架 | kkk | kkk |
杨鸿漾 | ppt展示 | kkk | kkk |
闫栩宁 | 博客园 | kkk | kkk |
程建君 | 博客园 | kkk | kkk |