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. php 技术点积累

    PHP 反射之动态代理 php跨域的几种方式 给 PHP 开启 shmop 扩展实现共享内存 php十进制转二进制不用函数 php+nodeJs+thrift协议,实现zookeeper节点数据自动发 ...

  2. MySQL--高性能MySQL笔记二

    人们通常使用varchar(15):来存储IP地址,然而它们其实是32位无符号整数,不是字符串,所以应该使用无符号整数存储IP地址,MySQL 提供 INET_ATON() 和 INET_NTOA() ...

  3. React 长列表修改时避免全体渲染

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <script ...

  4. Java分布式锁三种实现方案

    方案一:数据库乐观锁 乐观锁通常实现基于数据版本(version)的记录机制实现的,比如有一张红包表(t_bonus),有一个字段(left_count)记录礼物的剩余个数,用户每领取一个奖品,对应的 ...

  5. C语言的unsigned做双目运算符的奇怪问题

    首先看代码: #include <stdio.h> void main() { ; unsigned ; ) { printf("%d-%d=%d,大于0", num1 ...

  6. Java入门指南-01 基本概要说明

    一.Java语言概述 Java是一门面向对象编程语言.编程,即编写程序.程序对于我们来说,应该是有所了解的.只是有可能你们不知道而已.比如,我们电脑上的 QQ.谷歌浏览器等,都叫做应用程序. 二.本系 ...

  7. 【bzoj2523】【CTSC2001】聪明的学生

    真是神仙题,做完后感觉智商提(jiang)升(di)了 这种题一般都是把局面设成状态,然后发现可以由一种状态转移到另一种状态,那就是 $dp$ 了. 但是这道题怎么设呢? 题目中给了你一个结论,一般题 ...

  8. java序列化和反序列化及序列化方式

    平时我们在Java内存中的对象,是无 法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即 存储对象中的状态 ...

  9. fastjson简单使用demo,@JSONField注解属性字段上与set、get方法上。实体类toString(),实体类转json的区别;_下划线-减号大小写智能匹配

    一.demo代码 @JSONField注解属性字段上与set.get方法上.使用@Data注解(lombok插件安装最下方),对属性“笔名”[pseudonym]手动重写setter/getter方法 ...

  10. 解决java编译错误:编码 GBK 的不可映射字符 (0x8C)

    1. 问题概述: 程序很简单,打印一行字:你好,世界 (使用的工具是:win10自带的记事本.java的jdk:java development kit) 但是在打开终端进行编译时,报出了一个错误:编 ...