
数据结构
文章平均质量分 74
GoodLinGL
这个作者很懒,什么都没留下…
展开
-
内存对齐
内存对齐内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。对于内存对齐问题,主要存在于struct和union等复合结构在内存中的分布情况,许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们要求这些数据的首地址的值是某个数M(通常是4或8);对于内存对齐,主要是为了提高程序的性能,数据结构,特别是栈,应尽可能在自然边界上对齐,经过对齐后,cpu的内存访问速度大大提升。Windows中默认对齐数为8,Linux中默认对齐数为4;内存对齐的主要作原创 2021-03-29 21:31:10 · 1590 阅读 · 0 评论 -
十大排序算法
先用两张图概括:冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。什么时候最快: 当输入的数据已经是正序时什么时候最慢: 当输入的数据是反序时#include <iostream>using namespace std;template<typename T> //整数或浮点数皆可使用,若要使用类(class)或结构体(struct)时必须重载大于(&g转载 2021-03-24 00:41:20 · 227 阅读 · 0 评论 -
C++ STL容器底层实现间的对比分析
map与unordered_mapmap: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素。因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行的操作。map中的元素是按照二叉搜索树(又名二叉查找树、二叉排序树,特点就是左子树上所有节点的键值都小于根节点的键值,右子树所有节点的键值都大于根节点的键值)存储的,使用中序遍历可将键值按照从小到转载 2021-03-22 20:16:58 · 214 阅读 · 0 评论 -
平衡二叉树和红黑树
平衡二叉树平衡二叉树或者是空树,或者是具有如下特征的二叉排序树:(1 )左子树和右子树的深度之差的绝对值不超过1;(2)左子树和右子树也是平衡二叉树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。红黑树红黑树的性质:节点是红色或黑色。根节点是黑色。每个叶子节点都是黑色的空节点(NIL节点)。每个红色节转载 2021-03-22 19:57:20 · 182 阅读 · 0 评论 -
哈希表
定义hash: 元素通过一个函数转换为整数,使得该整数可以尽量唯一地代表这个元素。其中的转换函数即称为哈希函数 H,若元素在转换前为key,那么在转换后就是一个整数H(key)。哈希表最主要的优点是能够在O(1)时间查找某一元素,是效率最高的查找方式。但其缺点是需要利用额外的空间来实现哈希表。哈希函数直接寻址法:恒等变换H(key) = key,即把key作为数组下标;或是线性函数H(key) = a * key + b(适合查找表较小且连续的情况,需要事先知道关键字的分布情况);数字分析法:如原创 2021-03-13 21:53:27 · 256 阅读 · 0 评论