
数据结构
文章平均质量分 82
小wanga
须知少时凌云志,曾许人间第一流
展开
-
【数据结构与算法】跳表
skiplist 本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为 key 或者 key / value 的查找模型。那么相比而言它的优势是什么的呢?这么等我们学习完它的细节实现,我们再来对比。skiplist是由 William Pugh 发明的,最早出现于他在 1990 年发表的论文《Skip Lists: A Probabilistic Alternative to Balanced Trees》。skiplist,顾名思义,首先它是一个 list。原创 2025-03-20 22:43:48 · 1012 阅读 · 0 评论 -
【数据结构与算法】LRU Cache
LRU 是 Least Recently Used 的缩写,意思是最近最少使用,它是一种 Cache 替换算法。什么是Cache?狭义的 Cache 指的是位于 CPU 和主存间的快速 RAM(随机存取存储器), 通常它不像系统主存那样使用 DRAM 技术,而使用昂贵但较快速的 SRAM 技术。广义上的Cache 指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。原创 2025-03-20 21:52:16 · 823 阅读 · 0 评论 -
【数据结构与算法】最小生成树|最短路径
Dijkstra 算法只能求出没有负权的图的最短路径,时间复杂度为 O(N^3)。BellmanFord 算法能够求出有负权的图的最短路径,时间复杂度为 O(N^3)。但存在负权回路问题,任何算法都无法解决负权回路问题。Dijkstra 算法和 BellmanFord 算法都需要给点起点,求得的是从起点到其他点的最短路径;而 FloydWarshall 算法能够求出任意两点之间的最短路径,时间复杂度为 O(N^3)。原创 2025-03-19 09:59:19 · 1191 阅读 · 0 评论 -
【数据结构与算法】图的基本概念 | 邻接矩阵和邻接表 | 广度优先遍历和深度优先遍历
本篇博客主要讲解了图的基本概念、邻接矩阵和邻接表、图的广度优先遍历和深度遍历等。那么以上就是本篇博客的全部内容了,如果大家觉得有收获的话,可以点个三连支持一下!💖💝❣️。原创 2025-03-15 23:29:12 · 1049 阅读 · 0 评论 -
【数据结构】并查集
本篇博客主要讲解了什么是并查集、并查集的模拟实现、并查集的应用:省份数量和等式方程的可满足性以及并查集的优化等等。那么以上就是本篇博客的全部内容了,如果大家觉得有收获的话,可以点个三连支持一下!💖💝❣️。原创 2025-02-24 13:45:29 · 1265 阅读 · 0 评论 -
【数据结构_C语言】归并排序—文件类型
内排序:数据量相对少一些,可以放到内存中排序。外排序:数据量较大,内存中放不下,数据放到磁盘文件中,需要排序。原创 2024-07-22 22:19:51 · 602 阅读 · 0 评论 -
【数据结构】二叉树-2
设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。学习二叉树结构,最简单的方式就是遍历。2.非空:根节点,根节点的左子树、根节点的右子树组成的。原创 2024-07-16 11:19:41 · 1289 阅读 · 0 评论 -
【数据结构】二叉树-1
现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;原创 2024-07-15 11:45:36 · 1048 阅读 · 0 评论 -
【数据结构】栈的实现(含详细代码)
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后出LIFO(Last In First Out)的原则。代码共含三个文件,分别为Stack.h(头文件和函数声明), Stack.c(函数实现) Test.c(main函数和执行测试)栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。压栈:栈的插入操作叫做进栈/压栈/入栈/,入数据在栈顶。出栈:栈的删除操作叫做出栈,出数据也在栈顶。原创 2024-07-08 11:21:46 · 1081 阅读 · 0 评论 -
【数据结构】栈和队列
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。压栈:栈的插入操作叫做进栈/压栈/入栈/,入数据在栈顶。出栈:栈的删除操作叫做出栈,出数据也在栈顶。原创 2024-07-01 14:32:34 · 1767 阅读 · 0 评论 -
【数据结构】算法的时间复杂度和空间复杂度
斐波那契数列的递归实现方式非常简洁,但简洁一定好吗?那该如何衡量其好与坏呢?原创 2024-06-30 20:28:54 · 929 阅读 · 0 评论 -
【数据结构】前言
数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值作为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。原创 2024-06-30 19:38:34 · 769 阅读 · 0 评论 -
【数据结构】链表
概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。3.从堆上申请的空间,是按照一定的策略来分配的,两次申请的空间可能连续,也可能不连续。1.从上图可看出,链式结构在逻辑上是连续的,但是在物理上不一定连续。备注:缓存利用率参考存储体系结构以及局部性原理。2.现实中的结点一般都是从堆上申请出来的。原创 2024-06-29 15:54:50 · 397 阅读 · 0 评论 -
【数据结构】线性表:顺序表
所以现实中都是使用动态顺序表,根据需要动态分配的空间大小,所以下面我们实现动态顺序表。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。原创 2024-06-24 11:32:27 · 852 阅读 · 0 评论