首页 > 其他分享 >数据结构

数据结构

时间:2024-01-23 20:58:46浏览次数:25  
标签:hash 链表 查找 键值 哈希 数据结构 节点

哈希表

也称为散列表,用于实现键值对的存储和查找。hash值的计算通常通过与运算hash&(m-1)方式实现,其桶的数量必须为2的次幂数(也可以通过取模hash%m计算hash值)。哈希函数将键映射到索引的位置,时间复杂度为O(1)(最坏O(n)),常见的有开放地址法和链表法两种:

  • 开放地址法:当发生哈希冲突时,尝试在哈希表中寻找下一个可用的位置,直到找到一个空闲的位置为止。常见的探测方法包括线性探测、二次探测和双重哈希等。
  • 链表法:使用链表来存储哈希冲突的键值对,将冲突的键值对插入到链表的末尾。

B+树

多路平衡查找树,具有以下特点:

  • 每个节点有多个子节点以控制树高
  • 非叶子节点只存储键值信息,数据都存在叶子节点中
  • 所有叶子节点之间都有链指针

红黑树

自平衡二叉树,通过插入/删除时旋转保证树节点的平衡。查找时间复杂度为O(log n)

lsm-tree

日志结构合并树,适用于写多读少问题。

跳跃表

基于多指针有序链表实现,查找时,从上层指针开始查找,找到对应的区间之后再到下一层去查找。

与红黑树等平衡树相比,跳跃表不需要进行旋转等操作来维护平衡性,插入速度非常快速; 更容易实现; 支持无锁操作。

布隆过滤器

通过一系列hash运算与二进制数组比对判断元素是否可能存在(不能判断元素一定存在),具有空间效率高、时间效率高的特点。

标签:hash,链表,查找,键值,哈希,数据结构,节点
From: https://www.cnblogs.com/gxyan/p/17983398

相关文章

  • 数据结构学习中测试代码
    线性表顺序表的一些基本性质//#defineprint(x) std::cout<<x<<std::endl//#defineget(x) std::cin>>x#include<iostream>#include<fstream>usingnamespacestd;#defineInitsize100#typedefstruct{ int*data; intMaxsize,leng......
  • 经典数据结构题目-栈与队列
    栈与队列232.用栈实现队列思路使用两个栈一个栈负责队列的push存元素,将里面的元素pop后放在另外一个栈。此时,另外一个栈最上面的就是最先放入,可用来做队列的pop代码publicMyQueue(){pushSt=newStack<>();popSt=newStack<>();}......
  • 【OpenCV】:浅析 OpenCV 中的图像数据结构 Mat
    以下内容主要来自OpenCV中的mat.hpp这个头文件关于MatMat是OpenCV中用来存储图像数据的基础数据结构,原话是Itcanbeusedtostorerealorcomplex-valuedvectorsandmatrices,grayscaleorcolorimages,voxelvolumes,vectorfields,pointclouds,tensors,......
  • 数据结构
    时间复杂度评判规则:量化算法执行的操作/执行步骤的数量;最重要的项:时间复杂度表达式中最有意义的项大O记法:O(最重要的一项)O(1)表示一个特殊复杂度,含义为某个任务通过有限可数的资源即可完成,于输入数据量n无关;一个顺序结构的代码,时间负责度是O(1);二分查找法,分而治之的二分......
  • 数据结构——栈及相关操作
    #include<bits/stdc++.h>#defineMaxSize10#defineElementTypeinttypedefstruct{ElementTypedata[MaxSize];inttop;}SqStack;voidInitStack(SqStack&S){S.top=-1;}boolStackEmpty(SqStack&S){if(S.top==-1)......
  • 【数据结构】详谈队列的顺序存储及C语言实现
    循环队列及其基本操作的C语言实现前言大家好,很高兴又和大家见面啦!!!在上一篇内容中,我们在介绍完队列的基本概念、重要术语以及基本操作后,又回顾了一下数据结构的三要素——数据的逻辑结构、数据的存储结构以及数据的运算。队列这种数据结构我们已经介绍了它的逻辑结构以及数据运算......
  • 最大异或和 可持久化数据结构入门
    最大异或和题目描述给定一个非负整数序列\(\{a\}\),初始长度为\(N\)。有\(M\)个操作,有以下两种操作类型:Ax:添加操作,表示在序列末尾添加一个数\(x\),序列的长度\(N\)加\(1\)。Qlrx:询问操作,你需要找到一个位置\(p\),满足\(l\lep\ler\),使得:\(a[p]\oplusa[p+1]......
  • 数据结构——线段树 入门以后 学习笔记
    数据结构——线段树入门以后学习笔记入门笔记有时间写。才发现我不会线段树。/ll可以看出来我很喜欢class/cf有的代码需要前置:usingll=longlong;constexprllmod=998244353;constexprintroot=1;P3372线段树1classseg_t{private:structemm{......
  • 这才是你应该了解的Redis数据结构!
    深入了解Redis数据结构Redis,作为一种高性能的内存数据库,支持多种数据结构,从简单的字符串到复杂的哈希表。在这篇博文中,我们将深入探讨Redis的一些主要数据结构,并通过详细的例子展示它们的使用。1.字符串(String)1.1存储和获取Redis中的字符串是二进制安全的,可以存储任何数......
  • mysql8.0索引数据结构
    1、为什么使用索引假如给数据使用二叉树这样的数据结构进行存储,如下图所示2、索引及其优缺点2.1、索引概述2.2、优点(1)类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本,这也是创建索引最主要的原因。(2)通过创建唯一索引,可以保证数据库表中每一行数据的唯一性......