摘要: 线索化二叉树: 线索化二叉树指的是将二叉树中的结点进行逻辑意义上的“重排列”,使其可以线性的方式访问每一个结点。 二叉树线索化后每个结点都有一个线性下标,通过这个下标可以快速访问结点,而不需要遍历二叉树。 阅读全文
posted @ 2016-10-03 16:41 若离相惜 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 二叉树遍历: 从根结点开始,按照某种次序依次访问二叉树中的所有结点。 前序遍历: 中序遍历: 后序遍历: 层次遍历: 代码实现: 阅读全文
posted @ 2016-10-03 16:35 若离相惜 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 指路法定位结点: 通过根结点与目标结点的相对位置进行定位 指路法可以避开二叉树递归的性质“线性”定位 在C语言中可以用 bit 位来进行指路: #define BT_LEFT 0 #define BT_RIGHT 1 typedef unsigned long long BTPos; 二叉树的存储结 阅读全文
posted @ 2016-10-03 16:18 若离相惜 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 树结构模型: 1. 双亲孩子表示法模型 每个结点都有一个指向其双亲的指针 每个结点都有若干个指向其孩子的指针 2. 孩子兄弟表示法模型 每个结点都有一个指向其第一个孩子的指针 每个结点都有一个指向其第一个右兄弟的指针 本质是将普通树转化为二叉树 二叉树的定义: 二叉树是由 n (n >= 0) 个结 阅读全文
posted @ 2016-10-03 11:20 若离相惜 阅读(416) 评论(0) 推荐(0) 编辑
摘要: 树的定义: 树是一种非线性的数据结构。 树是由 n (n >= 0) 个结点组成的有序集合。 如果 n 为0,称为空树; 如果 n > 0, 则: 有一个结点称为根结点(root),它有直接后继,但没有直接前驱; 除根以外的其他结点划分为 m (m > 0)个互不相交的有限集合 T0, T1, .. 阅读全文
posted @ 2016-10-03 11:19 若离相惜 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 基本思想: 将两个或两个以上的有序序列合并为一个新的有序序列: 有序序列 V[1] ... V[m] 和 V[m+1] ... V[n] ——> V[1] ... V[n] 这种方法称为2路归并。 将3个有序序列归并为一个新的有序序列,称为3路归并。 将有多个有序序列归并为一个新的有序序列,称为多路 阅读全文
posted @ 2016-09-25 20:53 若离相惜 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 基本思想: (1)任取待排序序列中的某个数据元素(例如:第一个数据元素)作为基准,按照该元素的关键字大小将整个序列划分为左右两个子序列: 左侧子序列中所有元素都小于或等于基准元素 右侧子序列中的所有元素都大于基准元素 基准元素排在这两个子序列的中间 (2)分别对这个子序列重复实施上述方法,直到所有的 阅读全文
posted @ 2016-09-25 20:52 若离相惜 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 希尔排序(Shell Sort)也是插入排序的一种。也称为缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 基本思想: 将待排序列划分为若干组,在每一组内进行插入排序,以使整个序列基本有序,然后再对整个序列进行插入排。 阅读全文
posted @ 2016-09-25 20:45 若离相惜 阅读(8805) 评论(1) 推荐(0) 编辑
摘要: 基本思想: 设待排序数据元素序列中的元素个数为n,最多做n-1趟,i = 1, 2, ..., n-1。在第 i 趟中从后向前,j = n-1, n-2, ..., i,两两比较 V[j-1] 和 V[j] 的关键字。如果发生逆序,则交换 V[j-1]和 V[j]。 小结: 选择排序,插入排序以及冒 阅读全文
posted @ 2016-09-24 22:52 若离相惜 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 1. 普通单链表 2. 内核链表 上图是本人从其他博客盗来的,差点被糊弄过去。 下图是本人自己用KeyNote画的(唉!!画图真的是让人心好累啊!!)。 差异是不是很明显啊?! Read The Fucking Source Code 1. 初始化 就连一个链表的初始化都想的这么周到!!真屌!! 初 阅读全文
posted @ 2016-09-24 22:12 若离相惜 阅读(1588) 评论(0) 推荐(0) 编辑