DS博客大作业--树

大作业博客要求 (10分)

1.树的存储结构说明

.树采用的是链式存储结构。
.这段代码中定义了两个结构体。第一个是自定义为Name类型的结构体,里面的成员有字符串str和类型为整型的判断变量flag(判断是目录名还是文件)。
第二个结构体自定义为BTNode类型,里面的成员有Name类型的data(用于存放树结点),还有两个结构体指针分别指向兄弟结点和孩子结点。

1.1头文件1TreeNode.h

(定义结构体)

1.2.头文件2 TreeFunction.h

(声明函数,方便后续函数使用时的调用)

1.3.其他两个文件:tree.cpp、input.cpp里包含的内容都是对各种函数功能的实现

2.树的函数说明

主函数.main.cpp

定义变量,控制输出输入的内容等

函数1.BTree ReadFile()函数

.功能:读取file文件和创建树结点。
.设计思路:定义一个字符串用来存从文件中读取出来的字符,同时调用另一个函数创建树结点,最后将BT返回主函数。

函数2. void CreateNode(BTree &BT, string name)



.功能:创建树结点。
.设计思路:对字符串一段一段判断,以\和\0作为停止的点,定义flag用于区分插入位置,定义judge用来判断是否找到插入位置,定义一个结构名pre,根据name[i]是不是文件对pre.flag进行赋值,然后再根据它是文件还是目录进行创建结点

函数3.void PrintTree(BTree BT, int k)



.功能:输出树。
.设计思路:遍历树中所有结点,判断该结点是不是文件,若是文件,则以该树的兄弟树作为递归出口按照格式输出树,若不是,则以该树的孩子树作为递归出口按照格式输出树

函数4.void FindRoute(BTree &BT,int &flag,vector &s,string name)

.功能:查找路径。
.设计思路:用兄弟孩子树做递归出口。比较name与data.str的大小关系,若相等 ,说明找到该文件,然后在目录树中寻找路径,并把它按照格式输出。

函数5.void DeleteNode(BTree &BT)





.功能:删除数据
.设计思路:以读取的方式打开文件,查找是否有需要删除的结点,若找不到,则输出找不到此目录,否则,用链式结构的方式删除所系结点,并写入文件,达到删除目录的目的。

函数6.void IncreaseNode(BTree &BT)







.功能:增加数据
.设计思路:定义一个Data,把需要增加的目录名赋给Data中的str,然后再与树中的str进行比较,若相等,则输出“已存在”,否则,调用Tool函数插入该结点。

函数7.void FileWrite(BTree BT,ofstream &write,vector &s)

.功能:修改文件
.设计思路:判断树的孩子结点是否为空,不为空时,把字符串存在vector里,再递归调用该函数本身,用于有共同路径的数据输到文件 。

函数8.int Tool(Name pre, BTree &Head, BTree &T, int flag)



.功能:有序地插入结点
.设计思路:判断该结点是文件还是目录,并比较str的大小 ,建立一个新结点,若为文件,把树T当作该结点的孩子 ,否则,把它当作该结点的兄弟。然后再根据已经查找所要插入的位置进行插入。

3.树结果演示

3.1.生成目录树

根据file.txt中的文件路径,生成一颗对应的目录树,并把树结构保存在tree.txt中。目录树中,孩子节点从左到右按照字符串字典序排序。

3.2.查找目录

输入一个文件名,能在目录树查找其路径,并把查找路径按照格式输出。

3.3.删除目录

输入一个删除目录,能把该节点及其所有分支都删除.更新tree.txt

3.4.增加目录

输入一个新路径,若该路径不存在,能在树中插入一个新分支。并更新tree.txt

4.碰到问题

  • Q1: 区分文件跟txt。
  • A1: 在结构体中增加一个变量。
  • Q2: 孩子结点排序混乱。
  • A2: 采用分段查找法,找到插入位置然后调用Tool函数插入结点,保证孩子结点有序。
  • Q3: 增加目录时,查找插入的位置。
  • A3: 用compear比较树中的str与Data中的str的大小,若都相等则该目录已存在,否找找到插入位置。

5.小结

.好的地方:结构体简洁明了,可读性好。功能比较完善。
函数都主要分装在一个文件里,归纳性强。
.需要改进的地方:暂无发现太大问题

6.小组成员分配说明

7.展示你们讨论的照片











DS博客大作业--树(李天明组)的更多相关文章

  1. DS博客大作业--树

    1.树的存储结构说明 树节点结构体 data:文件名 brother:兄弟节点 child:孩子节点 type:节点的类型,0为文件,1为目录 h:节点所在的层次 2.树的函数说明 头文件 函数1:C ...

  2. DS博客大作业--树 (陈梓灿组)

    1.树的存储结构说明 定义的结构体中,name是用于存放文件名称,string类型是字符串类型,定义了child孩子结点和brother兄弟结点. 2.树的函数说明 1.main函数 main函数中主 ...

  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. BZOJ 3679 数字之积 数位DP

    思路:数位DP 提交:\(2\)次 错因:进行下一层\(dfs\)时的状态转移出错 题解: 还是记忆化搜索就行,但是要用\(map\)记忆化. 见代码 #include<cstdio> # ...

  2. 002_Python基础学习网站

    (一)电脑端:Python 基础教程 (二)手机端:Python 基础教程

  3. 五十七.分布式ELK平台、ES安装 、 扩展插件 、Kibana安装

    1. ES集群安装 准备1台虚拟机 部署elasticsearch第一个节点 访问9200端口查看是否安装成功   1ELK是日志分析平台,不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写 ...

  4. 使用 nginx_rtmp_module 搭建个人学习流媒体服务器

    nginx 共享服务器中的视频 如果服务器处于内网或者没有公网ip,可以使用 相关软件进行打洞或转发 如: frpc https://github.com/fatedier/frp 或 holer h ...

  5. windows游戏编程鼠标

    ①.常用鼠标消息: WM_MOUSEMOVE           鼠标移动位置 WM_LBUTTONDOWN       鼠标左键按下 WM_LBUTTONUP             鼠标左键弹起 ...

  6. P1484 种树——数据结构优先队列

    种了一下午的树,终于给搞明白了((多谢各位大神的题解)(题解就不能讲清楚点吗(看不见看不见))): 你有k个树,你可以种在一条直线上,每个位置都有一个价值,如果你把树种在这里就可以获得这个价值,但是条 ...

  7. [crontab]修改默认编辑器

    crontab默认编辑器为nano,超级不好用 想要修改成vim或者其他编辑器,方法如下. sudo select-editor 改为3或者4 再次打开就直接是vim打开了

  8. postgresql could not connect to server

    问题: postgresql部署在linux上,在自己电脑上使用pgadmin连接出现could not connect to server错误 问题分析: 出现上述原因有3种情况 1.linux上的 ...

  9. Contest Hunter 3101

    题目 Contest Hunter 3101 阶乘分解 原题传送门 题目分析 这里介绍一个本蒟蒻自己\(yy\)出来的方法. 我们发现,对于某一个单个的整数\(n\),若\(n\)能被某一个数\(x\ ...

  10. Maven的New中没有Servlet问题(IDEA)

    1.问题 第一次使用Maven骨架创建Web项目的时候,遇到了 New 里面没有 servlet 的问题. 2.原因 经过查询,是因为IDEA检测到项目中没有导入相关的 jar 包导致. 3.解决方法 ...