
数据结构
文章平均质量分 78
LLZK_
这个作者很懒,什么都没留下…
展开
-
【面试题】海量数据面试题分析
海量面试题的条件一般都要求我们处理一批计算机内存放不下的数据。当我们遇到这种面试题时,常有以下几种思想: 1. 哈希切分 哈希切分就是将一个大文件,利用哈希的原理,将其分为若干个小文件。相同的数据都被分到同一个文件里。例如我有一个存放着100亿个整数的大文件,将其分为100个小文件。将每个数都模100,结果相同的数存放到一个文件里。如果这100亿个数理想均匀,则每个小文件大约为1亿个数。原创 2016-11-09 22:11:23 · 1092 阅读 · 0 评论 -
插入排序算法详解及实现
插入排序相对冒泡排序而言是一种较为快捷方便的排序算法。冒泡排序:http://blog.youkuaiyun.com/llzk_/article/details/51547923插入排序原理很简单,讲一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插原创 2016-06-10 20:30:37 · 75812 阅读 · 21 评论 -
C语言选择排序详解及其实现
选择排序(Selection sort)是一种简单直观的排序算法。这次我们依然将其分为有序组与无序组。(我将冒泡排序的链接放到这里,有兴趣的可以看看,冒泡排序:http://blog.youkuaiyun.com/llzk_/article/details/51547923)它的工作原理是每一次从无序组的数据元素中选出最小(或最大)的一个元素,存放在无序组的起始位置,无序组元素减少,有序组元素增加,直原创 2016-06-10 21:48:51 · 66276 阅读 · 4 评论 -
二叉树的五道面试题
1、判断一棵树是否是完全二叉树;2、求二叉树中最远两个结点的距离;3、由前序和中序遍历序列重建二叉树 (前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5);4、求二叉树两个结点的最近公共祖先;5、将二叉搜索树转化成有序的双向链表;判断一棵树是否是完全二叉树要想判断一颗树是否是完全二叉树,你得先知道什么是完全二叉树。完全二原创 2016-11-30 10:14:42 · 6273 阅读 · 2 评论 -
非比较排序-----计数排序,基数排序。
排序总归来说可分为两大类,比较排序与非比较排序。比较排序就是我们常用到的冒泡排序,插入排序,希尔排序,选择排序,堆排序,快速排序,归并排序。非比较排序不常用,但是在对一些特殊的情况进行处理时,它的速度反而更快。1、计数排序 排序原理:利用哈希的方法,将每个数据出现的次数都统计下来。哈希表是顺序的,所以我们统计完后直接遍历哈希表,将数据再重写回原数据空间就可以完成排序。注意事项原创 2016-11-26 21:35:04 · 3333 阅读 · 1 评论 -
【c++/数据结构】哈希表
哈希表哈希表(HashTable)又叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 哈希表的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字。把这个整型数字作为元素的下标存入数组(散列表),我们常用的算法有以下几原创 2016-11-06 14:19:23 · 2532 阅读 · 0 评论 -
【c++/数据结构】红黑树-RBTree
什么叫红黑树?同AVL树一样,红黑树也是近似平衡的二叉搜索树,与AVL树不同的是红黑树没有了平衡因子,但增加了一个枚举变量,来标明结点的颜(RED or BLACK)。因为红黑树可以保证它的最长路劲不超过它最短路径的两倍,所以它近似平衡。红黑树具有以下几点性质: 1. 每个结点都必须具有一种颜色(RED or BLACK)。 2. 根结点为黑色。 3. 如果一个结点为红色,那么它的两个孩原创 2016-10-30 16:38:40 · 1332 阅读 · 0 评论 -
【c++】构建一棵简单的二叉树
本文主要讲了如何使用c++来构建一个二叉树类,以及一些功能算法的实现。文中大部分函数的思想都是递归,其中赋值运算符重载有传统写法和现代写法两个版本,层序遍历是非递归,前、中、后序遍历有递归和非递归两个版本。1、构造函数(递归)2、拷贝构造函数(递归)3、析构函数(递归)4、赋值运算符重载(传统/现代)5、前中后序遍历(递归/非递归)6、层序遍历(非递归)7、查找第k层结原创 2016-10-16 15:58:21 · 25920 阅读 · 6 评论 -
【c++】二叉树的线索化
什么是二叉树的线索化?或者问什么是线索二叉树?按照某种遍历方式对二叉树进行遍历,可以把二叉树中所有结点排序为一个线性序列。在改序列中,除第一个结点外每个结点有且仅有一个直接前驱结点;除最后一个结点外每一个结点有且仅有一个直接后继结点。这些指向直接前驱结点和指向直接后续结点的指针被称为线索(Thread),加了线索的二叉树称为线索二叉树。以上是搜狗百科的一段文字,反正我是没看太懂。简单点原创 2016-10-18 16:36:20 · 4209 阅读 · 0 评论 -
【c++】数据结构———堆
堆是一种特殊的数据结构,它通常是一个可以被看做一棵树的数组对象。What?那它到底是一棵树,还是一个数组呢?答案是数组。这个数组以二叉树的形式来维护。注意:这个二叉树必须是完全二叉树堆结构的二叉树存储有两种: 最大堆:每个父亲结点的值都大于孩子结点。 最小堆:每个父亲结点的值都小于孩子结点。顾名思义,这种结构就是可以根节点为最大的/最小的结点。原创 2016-10-20 09:57:41 · 4807 阅读 · 1 评论 -
【c++】AVL树详解
AVL树是又叫平衡二叉搜索树,但是它不是完全平衡,只是近似平衡(高度平衡)。什么叫完全平衡?想象一下完全二叉树。根据名字’二叉搜索树‘,我们可以知道它的一些性质:1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)原创 2016-10-30 10:50:21 · 2325 阅读 · 3 评论 -
冒泡排序算法及其优化
冒泡排序算是排序算法里面的一种较为简单的算法,也是我接触的第一种排序算法,有升序与降序之分,如果面试的时候面试官问道这个题目,一定要问清楚是升序还是降序,这样会给你加分。下面,我以升序来讲一下它的运作。1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。原创 2016-05-31 18:02:40 · 8577 阅读 · 3 评论