数据结构
文章平均质量分 75
开压路机
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LRU Cache
LRU是least Recently Used的缩写,意思是最近最少使用,他是一种Cache替换算法。什么是Cache?狭义的Cache指的是位于CPU和主存之间的快速RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。广义上的Cache指的是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache,内存与磁盘之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache——称为Internet临时文件夹或网络内容缓存等。原创 2026-05-21 21:20:08 · 256 阅读 · 0 评论 -
跳表(skiplist)
跳表是一种基于多层有序链表的高效查找结构,由William Pugh在1990年提出。它通过在底层有序链表上建立多层索引,将查找时间复杂度优化至O(logn)。跳表通过随机层数分配(通常p=1/4,maxlevel=32)来平衡插入/删除效率,避免严格的比例维护。相比平衡树,跳表实现更简单,空间消耗更低(平均1.33指针/节点),且天然支持范围查询。其核心操作包括:查找(逐层比较)、插入(随机层数+前驱链接)和删除(前驱解除链接)。虽然存在随机性导致局部波动,但跳表在实现复杂度、空间效率和功能扩展性方面具有原创 2026-05-26 22:51:33 · 430 阅读 · 0 评论 -
B-树
B树是一种高效的外存数据结构,主要用于处理大规模数据存储和检索问题。它通过多叉树结构降低树高,减少磁盘I/O次数,显著提升查询效率。B树的核心特性包括:节点包含多个关键字和子节点指针,所有叶子节点位于同一层,关键字有序排列。B+树和B树是其优化版本,B+树将数据全部存储在叶子节点并通过链表连接,适合范围查询;B树通过兄弟指针减少分裂概率。这些结构广泛应用于数据库索引(如MySQL的InnoDB和MyISAM引擎),其中InnoDB采用聚集索引直接存储数据,MyISAM使用非聚集索引存储数据地址。B树系列因其原创 2026-05-26 19:42:02 · 370 阅读 · 0 评论 -
数据结构:图
本文系统介绍了图论的基本概念、存储结构、遍历算法以及最短路径和最小生成树算法。主要内容包括:1. 图的基本概念:定义有向图、无向图、完全图、连通图等术语,解释顶点度、路径、子图等核心概念。2. 存储结构:详细讲解邻接矩阵和邻接表两种存储方式,分析各自的优缺点,并提供完整的C++实现代码。3. 遍历算法:介绍广度优先搜索(BFS)和深度优先搜索(DFS)的实现原理和应用场景。4. 最小生成树算法:对比Kruskal和Prim算法的设计思路、实现方法和适用场景。5. 最短路径算法:分析Dijkstra、Bell原创 2026-05-21 17:11:27 · 484 阅读 · 0 评论 -
并查集
本文介绍了并查集(Union-Find)数据结构及其应用。并查集用于管理不相交集合的合并与查询操作,通过数组实现树形结构,其中负数表示根节点并存储集合大小。文章通过校招学生分组案例说明并查集的四个核心操作:查找元素所属集合、判断元素是否同属一个集合、合并两个集合以及统计集合数量。随后给出了并查集的C++模拟实现代码,包含查找根节点、合并集合和统计集合数等方法。最后通过LeetCode两道题目展示了并查集的实际应用:省份数量问题通过城市连接关系统计省份数,等式方程问题利用并查集验证方程的可满足性。原创 2026-04-21 21:03:17 · 407 阅读 · 0 评论 -
二叉树和堆
根结点左右子树不是堆,我们怎么调整呢?对于深度为k的,有n个节点的二叉树当且仅当每一个节点都与深度为k的满二叉树中编号从1至n的节点一一对应时称为完全二叉树。运用层序遍历,将空节点也进队列,当队头元素为空时跳出循环,判断此时队列中的元素节点是否为空,为空则为完全二叉树,不为空则不是完全二叉树。思路:将左子树和右子树拆出来,然后比较左子树和右子树,左子树的左是否等于右子树的右,左子树的右是否等于右子树的左。删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法。原创 2024-10-30 09:38:15 · 1100 阅读 · 0 评论 -
栈和队列的实现
栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作,。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入的数据在栈顶。出栈:栈的删除操作叫做出栈,出的数据也在栈顶。原创 2024-09-08 17:39:38 · 542 阅读 · 0 评论 -
链表与顺序表的区别和联系
缓存基本上来说就是把后面的数据加载到离自己近的地方,对于CPU来说,它是不会一个字节一个字节的加载的,因为这非常没有效率,一般来说都是要一块一块的加载的,对于这样的一块一块的数据单位,术语叫“Cache Line”,一般来说,一个主流的CPU的Cache Line 是 64 Bytes(也有的CPU用32Bytes和128Bytes),64Bytes也就是16个32位的整型,这就是CPU从内存中捞数据上来的最小数据单位。不在缓存,叫不命中,要把数据存内存加载到缓存,再访问。在缓存,缓存命中直接访问。原创 2024-09-02 09:09:20 · 305 阅读 · 0 评论 -
双向链表的实现
链表分类有八种:带头 不带头单向 双向循环 不循环(8种);最常见的是两种:单链表(不带头单向不循环链表)双向链表(带头双向循环链表)原创 2024-07-16 21:23:31 · 365 阅读 · 0 评论 -
经典单链表的OJ题
重复原因:新链表存在空链表和非空链表两种情况。上述代码存在重复代码,该如何优化?解决思路:让新链表不为空。解决方法创建一个哨兵位。原创 2024-07-04 09:58:20 · 442 阅读 · 0 评论 -
单链表专题
1.链表的概念及结构概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。与顺序表不同的是,链表⾥的每节"⻋厢"都是独⽴申请下来的空间,我们称之为“结点/节点”节点的组成主要有两个部分:当前节点要保存的数据和保存下⼀个节点的地址(指针变量)。原创 2024-06-11 11:45:28 · 258 阅读 · 0 评论 -
顺序表的实现及基于顺序表实现通讯录
数据结构是由“数据”和“结构”两词组合⽽来。什么是数据?常⻅的数值1、2、3、4.....、教务系统⾥保存的用户信息(姓名、性别、年龄、学历等。⽹⻚⾥⾁眼可以看到的信息(⽂字、图⽚、视频等等),这些都是数据2.什么是结构当我们想要使⽤⼤量使⽤同⼀类型的数据时,通过⼿动定义⼤量的独⽴的变量对于程序来说,可读性⾮常差,我们可以借助数组这样的数据结构将⼤量的数据组织在⼀起,结构也可以理解为组织数据的⽅式。原创 2024-05-15 23:04:45 · 918 阅读 · 0 评论
分享