摘要: TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元 阅读全文
posted @ 2018-05-16 16:01 程序员进阶笔记 阅读(3423) 评论(0) 推荐(0)
摘要: JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读、编写、解析。jsoncpp是c++解析JSON串常用的解析库之一。 jsoncpp中主要的类: Json::Value:可以表示所有支持的类型,如:int , double ,string , 阅读全文
posted @ 2018-05-16 15:52 程序员进阶笔记 阅读(699) 评论(0) 推荐(0)
摘要: 《移动迷宫》游戏简介:迷宫只有两个门,一个入口,一个出口。一个骑士骑马从入口走进迷宫,迷宫中设置有很多墙壁,对前进方向造成障碍。骑士需要在迷宫中寻找通路以到达出口。 本游戏的迷宫是“移动”的,每次骑士进入迷宫时,迷宫的入口、出口,甚至是迷宫中设置的障碍都是不同的。 设计思路 解决类似的问题,使用回溯 阅读全文
posted @ 2018-05-16 15:21 程序员进阶笔记 阅读(1660) 评论(0) 推荐(0)
摘要: 本节要讨论的是当给定 n(n>=0)个结点时,可以构建多少种形态不同的树。 如果两棵树中各个结点的位置都一一对应,可以说这两棵树相似。如果两棵树不仅相似,而且对应结点上的数据也相同,就可以说这两棵树等价。本节中,形态不同的树指的是互不相似的树。 前面介绍过,对于任意一棵普通树,通过孩子兄弟表示法的转 阅读全文
posted @ 2018-05-16 15:07 程序员进阶笔记 阅读(4070) 评论(0) 推荐(0)
摘要: 回溯法(八皇后问题) 回溯法,又被称为“试探法”。解决问题时,每进行一步,都是抱着试试看的态度,如果发现当前选择并不是最好的,或者这么走下去肯定达不到目标,立刻做回退操作重新选择。这种走不通就回退再走的方法就是回溯法。例如,在解决列举集合 {1,2,3} 中所有子集的问题中,就可以使用回溯法。从集合 阅读全文
posted @ 2018-05-16 15:05 程序员进阶笔记 阅读(1148) 评论(0) 推荐(0)
摘要: 赫夫曼树,别名“哈夫曼树”、“最优树”以及“最优二叉树”。学习哈夫曼树之前,首先要了解几个名词。 哈夫曼树相关的几个名词 路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径。图 1 中,从根结点到结点 a 之间的通路就是一条路径。路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 。 阅读全文
posted @ 2018-05-16 14:34 程序员进阶笔记 阅读(17089) 评论(2) 推荐(3)
摘要: 树的双亲表示法、孩子表示法和孩子兄弟表示法 在使用树结构描述实际问题时,大多数不是二叉树,更多的是普通的树结构,在存储之间具有普通树结构的数据时,经常使用的方法有3种: 双亲表示法 孩子表示法 孩子兄弟表示法 双亲表示法 取一块连续的内存空间,在存储每个结点的同时,各自都附加一个记录其父结点位置的变 阅读全文
posted @ 2018-05-16 14:12 程序员进阶笔记 阅读(15359) 评论(1) 推荐(3)
摘要: 通过前一节对线索二叉树的学习,其中,在遍历使用中序序列创建的线索二叉树时,对于其中的每个结点,即使没有线索的帮助下,也可以通过中序遍历的规律找到直接前趋和直接后继结点的位置。也就是说,建立的线索二叉链表可以从两个方向对结点进行中序遍历。通过前一节的学习,线索二叉链表可以从第一个结点往后逐个遍历。但是 阅读全文
posted @ 2018-05-16 11:55 程序员进阶笔记 阅读(594) 评论(0) 推荐(0)
摘要: 通过前面对二叉树的学习,了解到二叉树本身是一种非线性结构,采用任何一种遍历二叉树的方法,都可以得到树中所有结点的一个线性序列。在这个序列中,除第一个结点外,每个结点都有自己的直接前趋;除最后一个结点外,每个结点都有一个直接后继。 图1 满二叉树 例如,图 1 采用先序遍历的方法得到的结点序列为:1 阅读全文
posted @ 2018-05-16 11:37 程序员进阶笔记 阅读(1131) 评论(0) 推荐(0)
摘要: 前边介绍了二叉树的先序、中序和后序的遍历算法,运用了栈的数据结构,主要思想就是按照先左子树后右子树的顺序依次遍历树中各个结点。 本节介绍另外一种遍历方式:按照二叉树中的层次从左到右依次遍历每层中的结点。具体的实现思路是:通过使用队列的数据结构,从树的根结点开始,依次将其左孩子和右孩子入队。而后每次队 阅读全文
posted @ 2018-05-16 10:22 程序员进阶笔记 阅读(2507) 评论(0) 推荐(0)
摘要: 递归算法底层的实现使用的是栈存储结构,所以可以直接使用栈写出相应的非递归算法。 先序遍历的非递归算法 从树的根结点出发,遍历左孩子的同时,先将每个结点的右孩子压栈。当遇到结点没有左孩子的时候,取栈顶的右孩子。重复以上过程。实现代码函数: // 先序遍历非递归算法 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)