上一页 1 ··· 28 29 30 31 32 33 34 35 36 ··· 58 下一页
摘要: 通用树结构是一种容器,里面装有数据元素,我们有遍历元素的需求。 非线性决定了树中的每个结点没有固定的编号方式。 将队列中队首的指针定义成遍历时的游标,根节点进入队列后,游标指向根节点。 队头元素弹出,队首的指针就指向了别的元素,这就相当于移动了游标。 添加遍历相关的程序: 测试程序如下: 结果如下: 阅读全文
posted @ 2018-09-23 13:32 周伯通789 阅读(635) 评论(0) 推荐(0)
摘要: 添加count函数: 测试程序如下: 结果如下: 添加求高度和度数的函数: 阅读全文
posted @ 2018-09-23 12:37 周伯通789 阅读(182) 评论(0) 推荐(0)
摘要: 返回的指针谁来负责释放呢?我们采取的措施是使用智能指针来管理这棵树的生命周期。 返回一棵子树的好处是在某些场合,我们能够将H、I、J、M重组,并将它们重新的加回原来的树中。 示例: main函数使用了p指针指向的内存,但是不负责释放,因为从main函数的角度来看,这片内存不是main函数申请的,而从 阅读全文
posted @ 2018-09-23 08:16 周伯通789 阅读(354) 评论(0) 推荐(0)
摘要: 如果一个节点没有子树,那就直接清除这个节点,这就是出口。 添加free函数: 测试程序如下: 现在我们插入的根节点是在栈上,而在释放时却用了delete。 我们的程序比较小,delete栈中的对象暂时没有体现出bug,但是大型程序这样做是不允许的。 改进GTreeNode.h文件如下: GTree. 阅读全文
posted @ 2018-09-22 20:01 周伯通789 阅读(274) 评论(0) 推荐(0)
摘要: 问题: 新插入节点的位置如何指定? 非线性结构无法通过下标指定位置。 插入操作代码流程: 当前的树是一棵空树的话,新节点就当做空节点来插入。不是空树就查找新节点的父节点。 在GTree.h中添加插入操作: 测试程序如下: 结果如下: 小结: 阅读全文
posted @ 2018-09-22 19:36 周伯通789 阅读(753) 评论(0) 推荐(0)
摘要: 第一种查找方式中,如果保存这个值的节点确实保存在树中,那么就将这个节点的指针返回,否则返回空。 第二种查找方式中,按节点查找,如果找到就返回这个节点的地址,没有找到就返回空。 具体的查找方式不能像链表那样,因为树是非线性结构。 树是递归定义的,与树相关的算法也是递归的。 例如:我们查找H,先查找根节 阅读全文
posted @ 2018-09-22 18:52 周伯通789 阅读(449) 评论(0) 推荐(0)
摘要: GTree是通用树结构。 每个节点都包含了指向父节点的指针。 添加GTreeNode.h文件: 添加GTree.h文件: 从上往下看是非线性的,从下往上看是线性的,也就是类似于链表结构,加入父节点指针后,我们就可以用一些链表的知识来处理树了。 在工程中这种方式使用很广泛。 阅读全文
posted @ 2018-09-22 18:16 周伯通789 阅读(182) 评论(0) 推荐(0)
摘要: 树的定义是递归的,与树的相关算法也是递归的。 如果我们定义一个数组,这个数组中的每一个元素是一棵树,那么这个数组就构成了一个森林。 树节点里面有指向父节点的指针,对于工程实践来说非常有帮助。 添加TreeNode.h文件: 添加Tree.h文件: 小结: 阅读全文
posted @ 2018-09-21 22:19 周伯通789 阅读(241) 评论(0) 推荐(0)
摘要: 我们要使Srot能排序Array数组类。 Sort应该既能排序静态数组类又能排序动态数组类。 这个函数返回原生数组的首地址。 数组类需要新增成员函数array,排序类需要新增六个静态成员函数。 Array.h添加array函数: Sort.h改进如下: 无代理时的测试程序: 结果如下: 使用代理类: 阅读全文
posted @ 2018-09-21 20:46 周伯通789 阅读(368) 评论(0) 推荐(0)
摘要: 归并示意图: 程序入下: 注意:归并排序是一种稳定的排序算法 图解: 代码如下: 注意:快速排序是一种不稳定的排序算法 小结: 阅读全文
posted @ 2018-09-21 19:32 周伯通789 阅读(278) 评论(0) 推荐(0)
上一页 1 ··· 28 29 30 31 32 33 34 35 36 ··· 58 下一页