DS博客大作业--树
1.树的存储结构说明
树节点结构体
data:文件名
brother:兄弟节点
child:孩子节点
type:节点的类型,0为文件,1为目录
h:节点所在的层次
2.树的函数说明
头文件
函数1:CreatRoute
作用:根据输入的路径在树中创建对应的路径
设计思路
先遍历遍路径,逐个判断路径中的文件或目录在树中所在的同一层次中是否已经存在,若已存在着继续判断下一个文件或目录,若不存在则记录此路径上一个文件或目录并在树中找到对应的节点(若在路径开始的位置则为树根节点),再根据剩下的路径在所找到的路径下创建新的路径
代码
ps:这个函数是建树的关键函数,也是我构思了最久的函数,用map容器来储存已经存在的节点,这样在处理路径中的在树中已经存在的节点时就可以快速略过去创建那部分新的路径
函数2:SeetTree
作用:寻找指定的节点,同时若传入的flag值为1则在树中将此节点及后续节点删去
设计思路
遍历树,寻找与指定的值相同的节点,再根据flag的值决定是否删去此节点
代码
函数3:CreatTree
作用:在树中的指定节点下创建新的路径
设计思路
先在指定的节点下寻找到第一个节点的位置并在此位置创建第一个节点(保证节点按字典序排列,且所有非目录节点都在目录节点之前),再用尾插法创建剩下的节点(因为路径中的下一个节点是上一个节点的孩子节点,因此可以用尾插法建链表的形式创建剩余的节点)
代码
ps:建树的主体函数,创建路径的关键就在于第一个节点的创建,创建时既要保证兄弟链中的节点按字典序排序又要保证所有非目录节点都在目录节点之前,方便之后的输出,创建完头节点之后剩余节点的创建就和链表的创建差不多,每一个节点都是上一个节点的孩子节点,可以用尾插法来创建
函数4:CreatNode
作用:创建节点
设计思路
很普通的创建节点,没什么好说的
代码
函数5:SeetRoute
作用:根据输入的文件名查找路径,并把路径保存到栈中
设计思路
和二叉树查找的思路差不多,但要注意的是栈中同一层次的节点只能有一个,防止查找时把兄弟链的路径也保存到栈中
代码
ps:由于找到节点返回时,所找到的节点的双亲节点会优先入栈,所以将入栈条件设置为入栈的节点层次要小于栈顶的节点层次既可以保证路径的正确性又可以防止将查找路径时将兄弟节点也一并保存到栈中
函数6:DeleteNode
作用:删除节点及其所有分支
设计思路
本质上就是删除树,基本的操作
代码
函数7:StortTree
作用:将树图形化并保存到tree.txt中
设计思路
遍历树,先输出兄弟链中的非目录节点,再处理目录节点,具体操作见代码
代码
ps:输出时会扫描一遍兄弟链中的目录节点的数量,用来保证输出格式的正确性,同时将扫描兄弟链的条件设置为记录数组记录的当层节点为0用来保证不会对同一条存在目录节点的兄弟链多次扫描导致出错,即使因当条兄弟链的目录节点数为0导致多次扫描也不会导致输出出错
主函数
3.树结果演示
输入
输出
查找路径
插入新路径
删除节点及其所有分支
4.碰到的问题
- Q1:由于我是用map容器来记录树的节点是否存在的,只有当路径存在新节点时才会创建这条路径,而当输入一条由树中已经有的节点名称但层次不同的合法路径时这条路径无法创建
- A1:用多个map容器,树的每一层次都分别用一个map容器来记录,判定节点是已否存在时只用当层的map容器来判断
- Q2:删除节点时将节点的兄弟节点也一并删除了
- A3:在寻找要删除的节点时将指向此节点的指针由更改为NULL改为指向要删除节点的兄弟节点,同时在调用函数删除节点前将要删除节点的兄弟节点指针指向改为NULL
5.小结
本次大作业仍有一些缺点,一是将输出结构写入文件时将文件作为函数形参和反复写入影响效率,其实可以将所有的输入都写入string类中,再一次性输出到文件中,二是针对路径的创建可能会有一些特殊的情况无法处理,这是我思路本身的问题,真的要修复的话需要更换一种思路,对整个建树的代码进行大改,所以我也只好一直保留着这个bug写完这次作业了。
6.小组成员分配说明
- 康友煌:除查找路径以外的所有代码,博客园
- 王粤翰:查找路径的实现,查找bug,博客园
- 刘鲜:PPT,查找bug,理解代码
- 苏楚雯:PPT,查找bug,理解代码
- 张瑀鑫:PPT,查找bug,理解代码
- 许馨予:PPT,查找bug,理解代码
7.展示你们讨论的照片
转载于:https://www.cnblogs.com/xycm/p/10848750.html
DS博客大作业--树相关推荐
- DS博客大作业--树(李天明组)
DS博客大作业--树 大作业博客要求 (10分) 1.树的存储结构说明 .树采用的是链式存储结构. .这段代码中定义了两个结构体.第一个是自定义为Name类型的结构体,里面的成员有字符串str和类型为 ...
- DS博客大作业--树 (陈梓灿组)
1.树的存储结构说明 定义的结构体中,name是用于存放文件名称,string类型是字符串类型,定义了child孩子结点和brother兄弟结点. 2.树的函数说明 1.main函数 main函数中主 ...
- DS博客作业03--栈和队列
DS博客作业03--栈和队列 1.本周学习总结(0--1分) 谈谈你对栈和队列结构的认识及学习体会. 这章有认真预习,但做题还要依靠书,记不住,可能还需要多加练习,在PTA上的题只做了栈的,队列的做得 ...
- OO第三次博客总结作业
OO第三次博客总结作业 1.规格化设计的大致发展历史和为什么得到了人们的重视 发展历史...上网搜索了一圈...什么都没搜索到,只能谈谈自己对规格化设计重要性的一些看法. 规格化设计,顾名思义,是有 ...
- 利用博客提交作业的程序设计课程实践模式
(本文基于本人近三年来的工作写成,发表于<计算机教育>2014年第18期) 利用博客提交作业的程序设计课程实践模式 贺利坚 卢云宏 (烟台大学 计算机学院,山东 烟台 264005) ...
- 从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!...
从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!: "" (Via.) 转载于:https://www.cnblogs.com/devo ...
- c语言数据结构大作业,数据结构大作业——树(和广义表)
数据结构大作业--树(和广义表) 以广义表形式输入一棵树,然后以合适的比例将这棵树展示出来 (如何构造一个广义表已经略去) 对于广义表化的树,我们采用的树节点类似二叉链表形式的存储. 首先设计结点内容 ...
- DS博客作业04--树大作业
1.树的存储结构 本组采用的树的存储结构为链式结构,选择如图所示的结构体 Name为结点的名称 LevelNum为孩子节点的个数 *Children[20]用来指向不同的孩子结点(类似于二叉树的结构体 ...
- DS博客作业07--查找
1.本周学习总结(0--2分) 1.1.思维导图 1.2谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 本周要求挑3道题目写设计思路.调试过程.设计思路用伪代码描述.题目选做要求: 原 ...
最新文章
- bzoj 1211 [HNOI2004]树的计数
- mysql 5.7.18-winx64_mysql 5.7.18 winx64安装配置方法图文教程
- Mobile3DRecon:手机上的实时单眼3D重建
- C++学习笔记-----在重载的赋值运算函数中调用拷贝构造函数
- 实验7-3-1 字符串逆序 (15分)
- html 基础之canvas 和 localStorage
- sql数据表改为自动递增显示与其他表关联_MySQL萌新第一季 第四话-数据表的基本操作...
- 程序员的必杀技——编程全能词典
- springboot集成购买阿里的rocketmq
- VHDL学习--分频器
- 2022年R1快开门式压力容器操作最新解析及R1快开门式压力容器操作新版试题
- 阿里云CDN介绍以及如何配合OSS使用
- cs1.6服务器ip地址文件,cs1.6服务器端封禁的IP在那个文件夹里?
- 快速入门Sqlite数据库应用
- 关于步进电机励相数、拍数、励磁方式、编码
- 分类效果评价(机器学习)
- 程序设计基础c语言邹启明,【基础强化】2020年秋季学期程序设计C语言项目顺利结课...
- 《计算传播学导论》读书笔记:第二章 文本分析简介
- vpp与dpdk的关系
- MUR1660AC-ASEMI高压大电流快恢复二极管
热门文章
- XXE漏洞检测及代码执行过程
- 分步骤学习自动化测试
- 1-jQuery - AJAX load() 方法【基础篇】
- PreTranslateMessage作用和使用方法
- Windows:让Windows XP中的IIS支持多站点的工具
- java 空串占用内存吗_java空字符串“”和null区别
- asp.net 安装element ui_Vue组件库系列三:打造属于自己的 UI 库文档(新版本的方案)...
- js轮询导致服务器瘫痪_演进:Tengine 从 Web 代理服务器 到 分布式推送服务器
- datagrid分页传递参数_四类数据库分页实现方案总结之Mysql分页实现
- 自拟计算机作文100字,玩电脑作文100字胡佳慧