随笔分类 -  数据结构与算法

数据结构学习笔记4.5--二叉树效率
摘要:之前的第4部分提到了二叉搜索树的查找,插入,删除操作,那二叉树的效率如何呢? 在一个满树中,大约有一半的节点在最低层,因此,查找、插入、删除节点的操作大约有一半都需要找到最低层的节点。 按照满树的计算方法,树的操作复杂度为O(logN)。但是遍历树相对来说要慢上许多,因此,如果不涉及到遍历操作的,二叉搜索树是一种很多好的数据结构。 二叉树完整代码:包含查找,插入,删除,遍历操作。 ... 阅读全文
posted @ 2014-02-13 01:01 winlrou 阅读(867) 评论(0) 推荐(0)
数据结构学习笔记4.4--删除节点
摘要:删除节点是二叉搜索树比较比较复杂的,一般删除节点有三种情况: 1.删除节点是叶子节点(没有字节点)。 2.删除节点只有一个子节点。 3.删除节点有两个子节点。 第一种是情况是最简单的;第二种情况也比较简单;第三种情况是最复杂的。 在真正删除节点前,还需要执行步骤:查找删除的节点 代码如下: Node current = root; // 当前节点 ... 阅读全文
posted @ 2014-02-13 00:52 winlrou 阅读(1132) 评论(0) 推荐(0)
数据结构学习笔记4.3--遍历树
摘要:遍历树是根据一种特定的顺序访问树的每一个节点。这个过程相对比较慢,所以一般不常用。 常用的遍历方法有三种,分别是:前序遍历,中序遍历,后序遍历。其中最常用,也最简单的是中序遍历。 遍历的最简单方法是用敌对调用,这里我们将三种排序方法都使用递归调用。 1.中序遍历 二叉树会使所有的节点按关键字值升序被访问到。如果需要创建有序的数据序列,使用中序遍历将会非常简单。 方法: ... 阅读全文
posted @ 2014-02-11 20:39 winlrou 阅读(345) 评论(0) 推荐(0)
数据结构学习笔记4.2--插入节点
摘要:插入一个节点,首先要找到插入的地方。需要从根节点开始,找到需要插入节点的父节点, 如果插入节点比父节点小,则插入到左子节点处;如果插入节点比父节点大,则插入到右子节点处。 图解:根据二叉树的节点的特点,找到插入节点的位置。 代码: /** * 插入节点,跟查找节点代码类似,只是在遇到null时,将节点插入,修改引用 * @param id... 阅读全文
posted @ 2014-01-27 23:10 winlrou 阅读(914) 评论(0) 推荐(0)
数据结构学习笔记4.1--查找节点
摘要:有序数组的优点: 在有序数组中查找数据可以用二分查找法,用这个方法在查找时效率很高,所需时间是0(logN), 然而在插入或者删除数据时,需要平均移动N/2项数据,如果需要做很多的插入删除操作,就不应该用有序数组。 链表的优点: 链表在插入或者删除时,操作很快,只需要修改对前一个节点的引用,修改后一个节点的引用,就能完成,所需时间复杂度为O(1), 但是在查找数据是,需要链表头开始... 阅读全文
posted @ 2014-01-27 21:33 winlrou 阅读(598) 评论(0) 推荐(0)
数据结构学习笔记3.2—快速排序
摘要:快速排序是目前最流行的算法,在大多数情况下,快速排序都是最快的,执行时间为O(N*logN)。 快速排序本质上是通过把一个数组划分为两个子数组,然后在递归调用自身对每一个字数组进行快速排序。 即数组划分为字数组A,B,在对A进行划分为A1,A2,对A1划分为A11,A12。。B也是如此执行,这就涉及到递归调用自身的操作。 1.取右值作为枢纽的情形 /** * 快速排序... 阅读全文
posted @ 2014-01-21 23:51 winlrou 阅读(316) 评论(0) 推荐(0)
数据结构学习笔记3.1--划分
摘要:划分是快速排序的根本机制,主要是把数组分为两组:小于关键字的数据项在一组,大于关键字的数据项在一组。 /** * 划分数据 * * @param left 左边数据 * @param right 右边数据 * @param pivot 参照值 * @return */ public static int partiti... 阅读全文
posted @ 2014-01-15 00:07 winlrou 阅读(270) 评论(0) 推荐(0)
数据结构学习笔记2--希尔排序
摘要:希尔排序比简单排序快得多,大约需要O(N×(logN)2)的时间,而且容易实现。希尔排序是基于插入排序,只是希尔排序不是比较相邻的数据,而是比较一定间隔的两个数据。 我们在选择排序算法时,基本上都可以使用希尔排序,如果有特殊要求或者算法不够快,在选择其他的排序算法。我们从插入排序的缺陷入手,看看问题: 问题: 插入排序思路:在标记符左边的数据是已经排序的,而右边的数据是没有排序,它有一个临时... 阅读全文
posted @ 2014-01-02 22:42 winlrou 阅读(383) 评论(0) 推荐(0)
数据结构学习笔记1--简单排序
摘要:一.冒泡排序冒泡排序是运行最慢点排序算法,但是确实最简单的。下图可以理解为队员排队。遵循的规则:1. 比较两个队员。2. 如果左边的队员高,则两队员位置交换。3. 向右移动一个位置,比较下面的两个队员。参照这样比较下去,虽然没有把所有队员位置排好,但是最高的队员已经在最右边的位置(如图d),此时,已经完成了第一趟排序,进行了N-1次比较。现在重新回到队伍的最左端,开始第二趟排序,需要比较N-2次,完成后,第二高的队员已经在倒数第二的位置上。不断执行这个过程,直到所有的队员都排定。需要记住的2点:1.相邻的两个数据比较。2.一趟比较下来后,数组最右边的数据是有序的。代码:主要代码逻辑 /*... 阅读全文
posted @ 2013-12-18 21:20 winlrou 阅读(262) 评论(0) 推荐(0)