
数据结构-查找
SoWhat1412
微信搜索【SoWhat1412】,第一时间阅读原创干货文章。人之患、在好为人师、不实知、谨慎言。点点滴滴、皆是学问、看到了、学到了、便是收获、便是进步。
展开
-
面试HashMap看这篇就够了
文章目录预备知识位运算知识ArrayListLinkedListRedBlackTreeHashTableHashMap预备知识位运算知识位运算操作是由处理器支持的底层操作,底层硬件只支持01这样的数字,因此位运算运行速度很快。尽管现代计算机处理器拥有了更长的指令流水线和更优的架构设计,使得加法和乘法运算几乎与位运算一样快,但是位运算消耗更少的资源。常用的位运算如下:位与 &...原创 2020-03-23 22:58:26 · 8779 阅读 · 151 评论 -
彻底搞定哈希表
Java 中对象的 hashCode 根据对象的地址来生成的,唯一不重复。为什么要重写hashcode跟equalsHash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这个源于Hash表设计的特殊性,它采用了函数映射的思想将记录的存储位置与...原创 2019-11-12 11:19:52 · 29672 阅读 · 6 评论 -
RBtree插入跟删除图解代码
一、红黑树的简介红黑树是一种平衡的二叉查找树,是一种计算机科学中常用的数据结构,最典型的应用是实现数据的关联,例如map等数据结构的实现。红黑树有以下限制:1. 节点必须是红色或者是黑色2. 根节点是黑色的3. 所有的叶子节点是黑色的。4. 每个红色节点的两个子节点是黑色的,也就是不能存在父子两个节点全是红色5. 从任意每个节点到其每个叶子节原创 2017-04-09 11:29:11 · 25670 阅读 · 3 评论 -
RBTree(红黑树)
http://www.linuxidc.com/Linux/2017-01/139950.htm红黑树 红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是Red或Black。通过对任何一条从根到叶子简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似于平衡。红黑树是满足下面红黑性质的二叉搜索树:原创 2017-04-04 11:12:49 · 891 阅读 · 0 评论 -
AVL树C++实现(end)
http://www.cnblogs.com/QG-whz/p/5167238.html#include "Queue.h" #include using namespace std; #include typedef struct avlnode { int key; int height; struct avlnode* left原创 2017-04-04 11:00:17 · 1033 阅读 · 0 评论 -
B树/B+树
https://www.jianshu.com/p/cf7dba86c391B+树讲解B树,(B-Tree) 是一种多路查找树, 2-3树和2-3-4树都是B树的特列。 节点最大的孩子数目称为B树的阶。数据库索引为什么会选择B树结构?答:因为使用B树查找时,所用的磁盘IO操作次数比平衡二叉树更少,效率也更高。为什么使用B树查找所用的磁盘IO操作次数比平衡二叉树更少?答...原创 2017-04-02 13:53:15 · 1449 阅读 · 0 评论 -
多路查找树
在前面专题中讲的BST、AVL、RBT都是典型的二叉查找树结构,其查找的时间复杂度与树高相关,都是在内存中进行的。那么降低树高自然对查找效率是有所帮助的。 另外还有一个比较实际的问题:就是大量数据存储中,实现查询这样一个实际背景下,平衡二叉树由于树深度过大而造成磁盘IO读写过于频繁,进而导致效率低下。那么如何减少树的深度(当然不能减少查询数据量),一个基本的想法就是:1. 每原创 2017-04-02 12:20:47 · 2223 阅读 · 1 评论 -
AVL树->图解1
Balance Binary Tree 是一种二叉排序树,其中每个节点的左子树跟右子树的高度至多为1;因为发现解决平衡二叉树算法的两个人名字命名为AVL树;我们将二叉树节点的左子树深度减去右子树深度的值(Hleft-Hright)=>平衡因子BF(Balance Factor) -1,0,1; 距离插入节点距离最近,且平衡因子的绝对值大于1的节点为根的子树,我们称为最小不平衡原创 2017-03-30 20:13:55 · 1240 阅读 · 1 评论 -
AVL树->图解2
排序二叉树对于我们寻找无序序列中的元素的效率有了大大的提高。查找的最差情况是树的高度。这里就有问题了,将无序数列转化为二叉排序树的时候,树的结构是非常依赖无序序列的顺序,这样会出现极端的情况。【如图1】: 这样的一颗二叉排序树就是一颗比较极端的情况。我们在查找时候,效率依赖树的高度,所以不希望这样极端情况出现,而是希望元素比较均匀的分布在根节点两端。原创 2017-03-31 17:15:24 · 943 阅读 · 0 评论 -
AVL树C代码
/*(2) 前序、中序、后序遍历二叉树 (递归) (3) 前序、中序、后序遍历的非递归算法 (4) 层次遍历二叉树 (5) 在二叉树中查找给定关键字(函数返回值为成功1,失败0) (6) 交换各结点的左右子树 (7) 求二叉树的深度 (8) 叶子结点数 (9) 删除某结点 */ #include<stdio.h> ...原创 2017-03-31 21:08:45 · 853 阅读 · 2 评论 -
二叉查找树(Binary Sort Tree)
在数据顺序存储时 如果无序我们用顺序查找, 有序时我们用折半查找法,插值查找法,斐波那契查找法。 但是当需要插入跟删除时就需要用到链式存储了 这时我们引入二叉排序树(二叉搜索树)。 线索二叉树node->left .data node.data node->right.data; 中序遍历时为递增数列 InOrderTraverse;原创 2017-03-30 09:56:48 · 812 阅读 · 0 评论 -
RBtree详解之删除(含完整红黑树代码)
前面我们讨论了红黑树的插入的实现,基本思想是分类讨论;然后分情况讨论以后我们发现插入操作调整函数只需要处理三种情况,并不是太复杂。但是删除操作会更复杂一点,因为二叉搜索树的删除操作本身就分成了多种情况,这样在执行删除操作后要处理的情况会更多;下面对于删除操作我们仍旧采取分类讨论的方法,将所有的情况梳理清楚后,就可以理解红黑树的删除调整函数的实质了。 下面先放出红黑树删除函数的代码:原创 2017-04-09 13:26:47 · 16360 阅读 · 2 评论 -
有序表查找
顺序表查找法,代码简单但是不智能。1.折半查找法-binary search如果线性表在排序是有序的 这种情况下我们才用顺序存储。//折半查找法int BinarySearch(int* a,int n, int key){ int low=0; int high=n-1; while(low<=high) { int mid = (low+high)/2; if(原创 2017-03-28 17:15:57 · 846 阅读 · 0 评论 -
顺序表查找
顺序表查找(Sequential Search)又叫线性表查找,是最基本的查找法,从第一个开始到最后一个逐个与关键字比较。成功不成功都返回。//顺序表查找int SequentialSearch(int* a,int n, int key){ for(int i=0;i<n;i++) { if(key==a[i]) { return i; } } else r原创 2017-03-28 13:41:51 · 841 阅读 · 0 评论