
数据结构
文章平均质量分 74
bxw1992
这个作者很懒,什么都没留下…
展开
-
hashtable桶大小取质数
为什么Hashtable的vector大小(也叫桶大小)选取质数? 是为了减少哈希冲突。 桶大小的选取是如何影响哈希冲突的呢?下面有两种看法: 1、举个例子,对于除法哈希表(Division method)h(k)=k mod m注意二进制数对取余就是该二进制数最后r位数。这样一来,Hash函数就和键值(用二进制表示)的前几位数无关了,这样我们就没有原创 2017-08-09 16:49:55 · 2820 阅读 · 0 评论 -
二叉树
一、定义满二叉树:在一棵二叉树中,所有的叶子节点都在最后一层,除了叶子节点外的其他节点出度都为2。完全二叉树:在一棵树中,所有的叶子节点都在最后两层,而且倒数第二层的叶子节点靠右侧连续排列,倒数第一层的叶子节点靠左侧连续排列。满二叉树必然是完全二叉树,反之则不然。二、二叉树性质(根节点在第一层,编号为1)1、在二叉树的第i层,最多有2i-1个节点。2、深原创 2017-07-10 21:35:37 · 270 阅读 · 0 评论 -
判断是否是平衡二叉树
平衡二叉树(AVL树)是满足下面条件的二叉树:1、是一棵空树。2、它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 树的高度:也就等于树的层数(根节点位于第一层)。 计算二叉树的高度:用到了递归结构,树的高度是,其左子树和右子树较高的子树的高度加1,递归的终止条件是子树的根节点为空。int deep(BiTree T){ if (T =原创 2017-08-14 22:14:34 · 455 阅读 · 0 评论 -
STL 源码阅读
1、这里可以看出来,容器将迭代器作为类成员。Vectora;Iterator ite=a.begin();容器的成员函数可以返回迭代器,所以迭代器是容器的成员对象。2、个人理解,迭代器是对指针的封装和提升,尽可能屏蔽数据结构的底层细节,对外提供统一的操作接口,这些接口跟普通指针的功能类似,比如自增或自减,提取所指向的元素等。为什么不直接用指针?指针在可以随机访问的数据结构(原创 2017-08-09 19:15:21 · 324 阅读 · 0 评论 -
拓扑排序
一、什么是拓扑排序在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:每个顶点出现且只出现一次。若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一转载 2017-08-21 13:48:55 · 212 阅读 · 0 评论 -
图的遍历
连通图:在无向图G中,如果从顶点v到v'有路径,则称v和v'是连通的。如果对图中任意两点,都是连通的,那么则称图G是连通图。在有向图G中,如果对于任意一对,vi、vj(不相等),从vi到vj,和从vj到vi都存在路径,则称G是强连通图。图的遍历:希望从图中某一顶点出发访便图中其余顶点。注意:如果,从某一点出发,可以遍历所有的顶点,前提就是图的连通性。对于无向图,必须是连通图原创 2017-08-17 17:10:42 · 363 阅读 · 0 评论 -
vector重新申请内存
一、realloc函数介绍realloc原型是externvoid *realloc(void *mem_address, unsigned int newsize);先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原原创 2017-08-04 15:56:44 · 3629 阅读 · 0 评论 -
链表
典型数据结构:数组、链表、队列、栈、二叉树、Hash表、图一、链表1、头指针和头结点头指针a) 头指针是指向链表第一个结点的指针,如果存在头结点,头指针就是指向头结点的指针。b) 头指针具有标识作用,常用头指针冠以链表的名字c) 无论链表是否为空,头指针均不为空(对此句话不认同)。头指针是链表的必要元素。 头结点a) 头结点是为了操作的统一和方便而设立的,位于第原创 2017-07-09 21:17:58 · 255 阅读 · 0 评论 -
二叉查找树
二叉查找树简介:1、用数组实现的二叉查找,查找效率为O(log2n),但是二叉查找的前提是数组有序,在数组中实现有序插入的效率太低 为O(n)。2、研究二叉查找树,研究二叉查找树是在保证二叉查找效率的情况下,提高插入的效率。3、简单的二叉查找树,如果没有策略保证其平衡性(任意叶节点到根节点的距离相差不超过1),最差情况下,会退化成链表(想象键值按升序插入一棵树,会产生一棵斜树)。插入和原创 2017-07-11 15:58:10 · 306 阅读 · 0 评论 -
红黑树,b-树,b+树
B树,B+树,红黑树都是用在搜索领域的。只不过各自的场景不尽相同,首先对搜索过程进行进一步的分析:搜索比较频繁的一个操作是在树的节点之间的跳转,这个过程一直到搜索到相应值或是叶子节点才停止。首先描述一个前提:如果我们认为节点之间的跳转所花费的时间和普通的链表上的指针移动是一个量级的,那么平衡的二叉树(利用红黑树实现)几乎具有最优的时间复杂度。 但是当前提不成立时,结论也就不成立原创 2017-09-17 22:58:37 · 298 阅读 · 0 评论