![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 53
simplehap
这个作者很懒,什么都没留下…
展开
-
折半查找c++的两种方法实现
折半查找在数据结构算法中是一个比较实用的算法。但是它是一个只能用于查找有顺序的数,这并不影响它的使用,可以先实现一个排序再进行查找。折半查找比较简单,但是注意的点也比较多。下面我将用递归和非递归两种方法进行实现。原创 2017-03-01 11:49:33 · 5977 阅读 · 0 评论 -
哈希表的扩展-布隆过滤器
布隆过滤器的简介什么是布隆过滤器?布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。为什么会出现布隆过滤器?在日常生活中,包括在设计计算机软件时,我们经常判断一个元素是否在一个集合中。比如:要检查一个单原创 2017-05-16 10:55:23 · 477 阅读 · 0 评论 -
HashTable哈希表/散列表(线性探测和二次探测)
HashTable的简单介绍HashTable是根据关键字直接访问在内存存储的数据结构。 HashTable叫哈希表或者散列表。 它通过一个关键值的函数将所需的数据直接映射到表中的位置来访问数据,这个映射函数叫散列函数(哈希函数),存放记录的数组叫散列表(哈希表)。比如: 给定一字符串“abckhdgubhkacdggk”找出第一次只出现一次的字符。原创 2017-04-24 17:35:07 · 24828 阅读 · 2 评论 -
BitSet位图
存储空间的计算1int为4个字节(byte) 1byte为8个 比特位(bit) 1kb = 1024 byte 1Mb = 1024 kb 1Gb = 1024Mb 1Tb = 1024Gb位图腾讯题:给40亿个不重复的无符号整型,没排过序。如何快速判断这个数存不存在? 如果内存允许,可以先进行排序,再用二分查找进行查找。但是40亿个无符号整型存储在内存中需要16G。 如果用位图原创 2017-05-03 10:58:33 · 381 阅读 · 0 评论 -
HashTable哈希表/散列表(哈希桶)
哈希桶的结构处理哈希冲突的开链法/拉链法 —-哈希桶 使用素数做哈希表的长度,可以降低哈希冲突 哈希桶的插入、删除、查找原创 2017-05-02 11:27:04 · 1387 阅读 · 0 评论 -
AVL树(平衡二叉树)
AVL树的概念一棵AVL树,要么是空树,要么是具有下列性质的二叉搜索树:它的左子树和右子树都是AVL树,且左子树和右子树的高度之差的绝对值不超过1。平衡因子每个节点都有一个平衡因子,任一节点的平衡因子是-1,0,1。每个节点的平衡因子等于右子树的高度减去左子树的高度。AVL树的效率如果一棵搜索二叉树的高度是平衡的,它就是AVL树。如果它有N个节点,它的高度保持在O((log2)N)原创 2017-04-06 20:48:35 · 385 阅读 · 0 评论 -
对称矩阵和稀疏矩阵以及它们的压缩存储
介绍两种矩阵,以及这两种矩阵压缩存储并且使用C++实现它们矩阵可以看为二维数组,存储与访问就和二维数组一样。原创 2017-03-17 12:17:27 · 1930 阅读 · 0 评论 -
复杂链表的复制
什么是复杂链表复杂链表就是,有一个单链表有两个指针,一个指针指向下一个节点,另一个指针指向任何节点,可以是指向空,可以指向自己,可以指向链表中的任意节点。 复杂链表的结构有两个指针,一个next,一个random,还有一个数据。原创 2017-04-12 12:01:48 · 260 阅读 · 0 评论 -
C++实现斐波那契数列 时间复杂度 空间复杂度
斐波那契数列我写了四种实现方法:第一种:递归实现long long Fib(int n)//递归{ if (n < 2) { return n; } return Fib(n - 1) + Fib(n - 2);}时间复杂度:O(2^n)空间复杂度:O(n)第二种:非递归实现long long FibNouR(int n)//非递归{ long long f原创 2017-03-01 12:40:30 · 1970 阅读 · 0 评论 -
二叉树的存储方式和遍历方式
二叉树:二叉树的每个节点至多有两个子树。如这个二叉树,其中1,2有两个子树,3只有左子树,5有右子树,4,6,7没有子树。二叉树有两种存储方式:第一种,数组表示。用数组存储方式就是用一组连续的存储单元存储二叉树的数据元素。 两颗树分别用数组表示为:原创 2017-03-20 17:46:17 · 21982 阅读 · 1 评论 -
二叉树的补充(非递归遍历)
上篇写了二叉树的递归遍历(前序,中序,后序)。但递归也有缺点:递归太深,空间有限,会导致栈溢出。(这个栈是内存管理分段、局部对象存储区域,属于操作系统内容)递归也可以转为非递归。其中有两种方法:第一种:将递归转为循环。比如:斐波那契数列和求前N项和。第二种:用栈进行解决。(这个栈是数据结构中的)不是所有递归都能用循环实现,比如:单链表的逆序打印和二叉树的遍历。下面的原创 2017-03-21 20:47:19 · 709 阅读 · 0 评论 -
线索化二叉树
二叉树是一种非线性结构,遍历二叉树几乎都是通过递归和借助栈完成的。二叉树作为存储结构时,取到一个节点,只 能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。于是,为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息。这就是二叉树的线索化。中序线索化:前序线索化:后序线索化:代码原创 2017-03-23 08:45:22 · 347 阅读 · 0 评论 -
堆的创建,插入,删除
堆(Heap)可以视为完全二叉树它的数据结构就是数组对象,在堆中,都是以下标进行访问的。堆分为: 最大堆:每个父节点的都大于孩子节点。 最小堆:每个父节点的都小于孩子节点。代码实现:原创 2017-03-23 16:19:29 · 274 阅读 · 0 评论 -
堆的应用
堆的应用:1.优先级队列2.海量数据处理(TopK问题)3.堆排序原创 2017-03-27 12:53:44 · 302 阅读 · 0 评论 -
搜索二叉树
搜索二叉树的性质 1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关 键码互不相同。 2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。 3. 右子树上所有节点的关键码(key)都大于根节点的关键码(key)。 4. 左右子树都是二叉搜索树。原创 2017-04-03 15:53:05 · 335 阅读 · 0 评论 -
红黑树
红黑树的概念和性质概念:红黑树是一棵二叉搜索树,它在以前的搜索二叉树的基础上每个节点上增加了一个存储位来表示节点的颜色,可以是红的或黑的。通过对任何一条从根到叶子简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似于平衡。 红黑树的性质: 1. 每个节点,不是红色就是黑色的 2. 根节点是黑色的 3. 如果一个节点是红色的,则它的两个子节点是黑色的…原创 2017-04-08 20:23:51 · 502 阅读 · 0 评论 -
一棵树是否是另一棵树的子树问题
判断一个节点是否在一棵二叉树中//判断一个节点是否在一棵二叉树中 bool IsInBinaryTreeNode(BinaryTreeNode* root, BinaryTreeNode* Node) { bool res = false; if (root->_data == Node->_data) res = true; if (!原创 2017-07-27 18:32:42 · 531 阅读 · 0 评论