一、平衡二叉树 二、散列表 2.1、散列表的构成 2.2、hash的选择 2.3、散列表操作流程 2.4、冲突产生原因 2.5、负载因子 2.6、冲突处理 2.6.1、链表法 2.6.2、开放寻址法 2.7、扩容和缩容 三、STL unordered_* 散列表实现 总结 一、平衡二叉树 平衡二叉树查找数据采用二分查找,每次查找排除一半。平衡的目的是增...
STL使用的是红黑树或者hash Tree ,由于笔者现在的水平和精力,没时间搞这个啦,于是我就 挑了一个稍微熟悉一点的数据结构:AVL 树; github:https://github.com/KimAlittleStar/cstd 【1.介绍】 AVL 树是根据二叉查找树改进延伸过来的,我们都知道二叉查找树中只有一个规则, 那就是根节点的元素一定会大于左孩子,小...
STL使用的是红黑树或者hash Tree ,由于笔者现在的水平和精力,没时间搞这个啦,于是我就 挑了一个稍微熟悉一点的数据结构:AVL 树; github:https://github.com/KimAlittleStar/cstd 【1.介绍】 AVL 树是根据二叉查找树改进延伸过来的,我们都知道二叉查找树中只有一个规则, 那就是根节点的元素一定会大于左孩子,小...
deque 采取一块所谓的 map(不是 STL 的 map 容器)作为主控,这里所谓的 map 是一小块连续的内存空间,其中的每个元素(此处成为一个结点)都是一个指针,指向另一段连续的内存空间,称作缓冲区。缓冲区才是 deque的存储空间的主体。 红黑树的特性,为什么要有红黑树 红黑树是一种自平衡的二叉搜索树,它具有以下特性:...
应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也称为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。
Map/Multimap:Map的元素是成对的键值/实值,内部的元素依据其值自动排序,Map内的相同数值的元素只能出现一次,Multimaps内可包含多个数值相同的元素,内部由二叉树实现,便于查找; 容器类自动申请和释放内存,无需new和delete操作。 2.2 STL迭代器 Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个...
deque 采取一块所谓的 map(不是 STL 的 map 容器)作为主控,这里所谓的 map 是一小块连续的内存空间,其中的每个元素(此处成为一个结点)都是一个指针,指向另一段连续的内存空间,称作缓冲区。缓冲区才是 deque的存储空间的主体。 红黑树的特性,为什么要有红黑树 ...
红黑树通过将结点进行红黑着色,使得原本高度平衡的树结构被稍微打乱,平衡程度降低。红黑树不追求完全平衡,只要求达到部分平衡。这是一种折中的方案,大大提高了结点删除和插入的效率。C++中的STL就常用到红黑树作为底层的数据结构。 红黑树VS平衡二叉树 除了上面所提及的树结构,还有许多广泛应用在数据库、磁盘存储等场景...
STL 的体系结构如下图所示: 泛型编程产生的背景 N. Wirth 曾经提出'算法 数据结构=程序',长期的程序设计实践也产生了许多优秀的算法和数据结构。例如,快速排序算法只要求数组元素可以比较大小即可完成排序工作,二叉排序树也只要求树节点可以比较大小,即可完成二叉树的各种操作。也就是说,算法和数据结构与类型无关,或...
deque 采取一块所谓的 map(不是 STL 的 map 容器)作为主控,这里所谓的 map 是一小块连续的内存空间,其中的每个元素(此处成为一个结点)都是一个指针,指向另一段连续的内存空间,称作缓冲区。缓冲区才是 deque的存储空间的主体。 红黑树的特性,为什么要有红黑树 ...