摘要: 递归算法底层的实现使用的是栈存储结构,所以可以直接使用栈写出相应的非递归算法。 先序遍历的非递归算法 从树的根结点出发,遍历左孩子的同时,先将每个结点的右孩子压栈。当遇到结点没有左孩子的时候,取栈顶的右孩子。重复以上过程。实现代码函数: // 先序遍历非递归算法 void PreOrderTrave 阅读全文
posted @ 2018-05-16 09:53 程序员进阶笔记 阅读(1114) 评论(0) 推荐(1)
摘要: 链式存储结构存储的二叉树,对树中结点进行逐个遍历时,由于是非线性结构,需要找到一种合适的方式遍历树中的每个结点。 递归思想遍历二叉树 之前讲过,树是由根结点和子树部分构建的,对于每一棵树来说,都可以分为 3 部分:左子树、根结点和右子树。所以,可以采用递归的思想依次遍历每个结点。根据访问结点时机的不 阅读全文
posted @ 2018-05-16 09:21 程序员进阶笔记 阅读(1273) 评论(0) 推荐(1)
摘要: 通过前一节的学习,了解了树的一些基本知识。二叉树是在树的基础上对本身的结构做了更高的限制: 二叉树本身是有序树。 二叉树中各结点的度最多是 2,可以是 0,1,2。 图1 二叉树 满二叉树和完全二叉树 如果二叉树中除了叶子结点,每个结点的度都为 2,那么此二叉树为满二叉树。例如图 1 就是一个满二叉 阅读全文
posted @ 2018-05-16 09:16 程序员进阶笔记 阅读(2452) 评论(0) 推荐(0)
摘要: 之前介绍的所有的数据结构都是线性存储结构。本章所介绍的树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。 (A) (B) 图 1 树的示例 图 1(A) 是使用树结构存储的集合 {A,B,C,D,E,F,G,H,I,J,K,L,M} 的示意图。对于数据 A 来说,和数据 B、C 阅读全文
posted @ 2018-05-16 09:12 程序员进阶笔记 阅读(823) 评论(0) 推荐(0)
摘要: 复制广义表数据结构中的树 树是数据结构中比较重要也是比较难理解的一类存储结构。本章主要主要围绕二叉树,对树的存储以及遍历做详细的介绍,同时还会涉及到有关树的实际应用,例如构建哈弗曼编码等。 由于树存储结构本身比较复杂,需要有耐心地去搞清楚每一节中的每个知识点,在学习时,建议从每节的问题出发,搞清楚文章的解题思路。 本章内容: 1. 数据结构中的树存储结构 2. 二叉树顺序存储和链式存储的C语... 阅读全文
posted @ 2018-05-16 09:09 程序员进阶笔记 阅读(965) 评论(0) 推荐(0)
摘要: 对于任意一个非空广义表来说,都是由两部分组成:表头和表尾。反之,只要确定的一个广义表的表头和表尾,那么这个广义表就可以唯一确定下来。复制一个广义表,也是不断的复制表头和表尾的过程。如果表头或者表尾同样是一个广义表,依旧复制其表头和表尾。所以,复制广义表的过程,其实就是不断的递归,复制广义表中表头和表 阅读全文
posted @ 2018-05-15 13:37 程序员进阶笔记 阅读(1398) 评论(0) 推荐(0)
摘要: 广义表的长度 通过前一节对广义表的介绍,例子中给出了几个广义表的长度。例如:空表的长度为 0,只含有一个原子的广义表长度为 1,等等。广义表的长度指的是广义表中数据元素的数量。这里需要指明的是,一个广义表中,一个原子算做是一个元素,一个子表也只算做一个元素。在 LS = (a1,a2,…,an) 中 阅读全文
posted @ 2018-05-15 13:31 程序员进阶笔记 阅读(23455) 评论(0) 推荐(2)
摘要: 广义表,又称为列表。记作: LS = (a1,a2,…,an) ;( LS 为广义表的名称, an 表示广义表中的数据)。 广义表可以看作是线性表的推广。两者区别是:线性表中的数据元素只能表示单个数据元素;广义表中的单个数据元素 ai ,既可以是单个元素,也可以是广义表。 原子和子表 在广义表中,单 阅读全文
posted @ 2018-05-15 13:24 程序员进阶笔记 阅读(3964) 评论(1) 推荐(1)
摘要: 矩阵之间能够进行加法运算的前提条件是:各矩阵的行数和列数必须相等。 在行数和列数都相等的情况下,矩阵相加的结果就是矩阵中对应位置的值相加所组成的矩阵,例如: 图1 矩阵相加 十字链表法 之前所介绍的都是采用顺序存储结构存储三元组,在类似于矩阵的加法运算中,矩阵中的数据元素变化较大(这里的变化主要为: 阅读全文
posted @ 2018-05-15 10:46 程序员进阶笔记 阅读(4557) 评论(0) 推荐(1)
摘要: 矩阵相乘的前提条件是:乘号前的矩阵的列数要和乘号后的矩阵的行数相等。且矩阵的乘法运算没有交换律,即 A*B 和 B*A 是不一样的。 例如,矩阵A:矩阵B:由于矩阵 A 的列数和矩阵 B 的行数相等,可以进行 A*B 运算(不能进行 B*A 运算)。计算方法是:用矩阵A的第 i 行和矩阵B中的每一列 阅读全文
posted @ 2018-05-14 15:13 程序员进阶笔记 阅读(3643) 评论(0) 推荐(0)