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. P1972 [SDOI2009]HH的项链 莫队or树状数组

    用什么树状数组莫队多帅 思路:树状数组\(or\)莫队(其实还是推荐树状数组\(QwQ\)) 提交:我告诉你我卡了一会儿常 卡不满原因:没有用奇偶性排序 题解: 莫队: 就是裸的莫队,把询问排序\(e ...

  2. 对象(Object)相关

    详情参考 1.对象的表示方法 js原生提供Object构造函数.js中所有的对象都是Object的实例. 定义一个对象最简单的就是var obj = {}; ES6属性和方法允许简写.对象的super ...

  3. Base64().encodeBase64Chunked导致换行符的问题

    String linkStr=new String(new Base64().encodeBase64Chunked(new String("conferid="+cid+&quo ...

  4. 配置apt源

    vim /etc/apt/source.list 配置完成后执行 apt update apt upgrade 配置完源之后,就可以在源中所有想要的包 apt search xxx 本地自带的源配目录 ...

  5. [Luogu] 八数码难题

    https://www.luogu.org/problemnew/show/P1379 long long ago 暴力bfs #include <iostream> #include & ...

  6. Jmeter随机参数各种搭配

    参数配置应该有三种场景,具体其他的我还没想到 一.两个固定值之间随机生成一个值,应用场景没有限制 1.最简单的两个值之间随机产生一个整数作为值,打开函数助手 2.选择函数 __Random 然后我想要 ...

  7. RES协议和断网访问URL出现的错误页面

    # 11 Id: 26a4.1470 Suspend: 1 Teb: 7ff9f000 Unfrozen # Memory ChildEBP RetAddr Args to Child 00 01ca ...

  8. 攻防世界Hello,CTF writeup

    解题过程 首先在ida中进行反汇编,查看main函数的代码: 代码的的36行处进行了一个字符串比较,如果v10的值等于v13的值会反馈一个success的输出.v13的值在第15行给出,因此需要知道v ...

  9. ubuntu dnsmasq问题

    在很多ubuntu开启wifi热点的教程中,配置比较繁琐的是hostapd+dnsmasq,很多教程都给出了dnsmasq的安装过程,其实在ubuntu桌面版系统下,已经集成到NetworkManag ...

  10. 【分享】《美国数学本科生,研究生基础课程参考书目(个人整理)》[DJVU][VERYCD]

    目录: 第一学年 几何与拓扑: 1.James R. Munkres, Topology:较新的拓扑学的教材适用于本科高年级或研究生一年级: 2.Basic Topology by Armstrong ...