
数据结构
文章平均质量分 77
熙曦Sakura
985大连理工大学计算机专业本科生,分享我的学习心得,欢迎大家批评指正
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构】 LRU Cache
LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache, 内存与硬盘之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache── 称为Internet临时文件夹或网络内容缓存等。原创 2025-06-06 18:07:18 · 414 阅读 · 0 评论 -
【数据结构】跳表
SkipList本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为key或者key/value的查找模型,SkipList是由William Pugh发明的,最早出现于他在1990年发表的论文《Skip Lists: A Probabilistic Alternative to Balanced Trees》SkipList,顾名思义,首先它是一个list,实际上,它是在有序链表的基础上发展起来的。如果是一个有序的链表,查找数据的时间复杂度是O(N)。原创 2025-06-06 17:39:35 · 749 阅读 · 0 评论 -
【数据结构】B树
如果树为空,直接插入新节点中,该节点为树的根节点树非空,找待插入元素在树中的插入位置(注意:找到的插入节点位置一定在叶子节点中)检测是否找到插入位置(假设树中的key唯一,即该元素已经存在时则不插入)按照插入排序的思想将该元素插入到找到的节点中检测该节点是否满足B-树的性质:即该节点中的元素个数是否等于M,如果小于则满足如果插入后节点不满足B树的性质,需要对该节点进行分裂:申请新节点找到该节点的中间位置将该节点中间位置右侧的元素以及其孩子搬移到新节点中。原创 2025-06-06 16:34:36 · 999 阅读 · 0 评论 -
【数据结构】图
摘要 图是由顶点集合V和边集合E组成的数据结构,分为有向图和无向图。顶点之间存在多种关系:邻接顶点、路径、完全图等。存储方式主要有邻接矩阵法,用二维数组表示顶点间关系,适合快速查询连通性但浪费空间。图算法需要考虑顶点度、路径长度、连通性等特性,并处理带权图的情况。代码示例展示了用C++实现图的邻接矩阵存储,包括添加顶点、边和打印图结构的功能。 (字数:150)原创 2025-06-06 15:33:46 · 1068 阅读 · 0 评论 -
【数据结构】并查集
毕业后,学生们要去公司上班,每个地方的学生自发组织成小分队一起上路,于是:西安学生小分队s1 = {0,6,7,8},成都学生小分队s2 = {1,4,9},武汉学生小分队s3 = {2,3,5}就相互认识了,10个人形成了三个小团体。从上图可以看出:编号6,7,8同学属于0号小分队,该小分队中有4人(包含队长0);编号为4和9的同学属于1号小分队,该小分队有3人(包含队长1),编号为3和5的同学属于2号小分队,该小分队有3个人(包含队长2)。现在0集合有7个人,2集合有3个人,总共两个朋友圈。原创 2025-06-05 19:43:31 · 588 阅读 · 0 评论 -
【数据结构】基本概念和术语
是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。抽象数据类型和数据类型实质上是一个概念。“抽象”的意义在于数据类型的数学抽象特性。抽象数据类型的定义由一个值域和定义在该值域上的一组操作组成。若按其值的不同特性,可细分为下列三种类型:原子类型 (atomic data type)属原子类型的变量的值是不可分解的。原创 2024-09-09 13:54:08 · 1152 阅读 · 0 评论 -
【数据结构】算法的时间复杂度和空间复杂度
一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。基本操作执行最好1次,最坏O(logN)次,时间复杂度为 O(logN) ps:logN在算法分析中表示是底数为2,对数为N。基本操作执行最好N次,最坏执行了(N*(N+1)/2次,通过推导大O阶方法+时间复杂度一般看最坏,时间复杂度为 O(N^2)基本操作执行最好1次,最坏N次,时间复杂度一般看最坏,时间复杂度为 O(N)基本操作执行了2N+10次,通过推导大O阶方法知道,时间复杂度为 O(N)原创 2024-09-09 14:30:59 · 881 阅读 · 0 评论 -
【数据结构】顺序表
数据结构是由“数据”和“结构”两词组合而来。什么是数据?常见的数值1、2、3、4…、教务系统里保存的用户信息(姓名、性别、年龄、学历等等)、网页里肉眼可以看到的信息(文字、图片、视频等等),这些都是数据。什么是结构?当我们想要大量使用同一类型的数据时,通过手动定义大量的独立的变量对于程序来说,可读性非常差,我们可以借助数组这样的数据结构将大量的数据组织在一起,结构也可以理解为组织数据的方式。想要找到草原上名叫“咩咩”的羊很难,但是从羊里找到1号羊就很简单,羊圈这样的结构有效将羊群组织起来。原创 2024-09-05 20:17:22 · 620 阅读 · 0 评论 -
【数据结构】顺序表的应用
2)能够保存用户信息:名字、性别、年龄、电话、地址等。1)至少能够存储100个⼈的通讯信息。原创 2024-09-07 11:53:46 · 559 阅读 · 0 评论 -
【数据结构】单链表专题
图中指针变量 plist保存的是第一个节点的地址,我们称plist此时“指向”第一个节点,如果我们希望plist“指向”第二个节点时,只需要修改plist保存的内容为0x0012FFA0。想象一下这样的场景,假设每节车厢的车门都是锁上的状态,需要不同的钥匙才能解锁,每次只能携带一把钥匙的情况下如何从车头走到车尾?链表中每个节点都是独立申请的(即需要插⼊数据时才去申请一块节点的空间),我们需要通过指针变量来保存下一个节点位置才能从当前节点找到下一个节点。与顺序表不同的是,链表里的每节"车厢"都是。原创 2024-09-08 12:22:09 · 524 阅读 · 0 评论 -
【数据结构】双向链表
实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了。带头链表里的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这里“放哨的”。这里的“带头”跟前面我们说的“头节点”是两个概念,实际前面的在单链表阶段称呼不严。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。2.带头双向循环链表:结构最复杂,一般用在单独存储数据。谨,但是为了更好的理解就直接称为单链表的头节点。原创 2024-09-10 15:48:55 · 399 阅读 · 0 评论 -
【数据结构】栈
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,进行数据插入和删除操作的一端称为。出栈:栈的删除操作叫做出栈。栈中的数据元素遵守后进先出。原创 2024-09-13 17:08:36 · 587 阅读 · 0 评论 -
【数据结构】队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。入队列:进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为队头。原创 2024-09-14 15:11:44 · 540 阅读 · 0 评论 -
【数据结构】二叉树的常见概念
通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系,。如上图:B、C、H、I。从根开始定义起,根为第1层,根的子节点为第2层,以此类推。若一个节点含有子节点,则这个节点称为其子节点的父节点。有一个特殊的结点,称为根结点,根节点没有前驱结点。以某节点为根的子树中任一节点都称为该节点的子孙。一个节点含有的子树的根节点称为该节点的子节点。原创 2024-09-16 13:39:51 · 1365 阅读 · 0 评论 -
【数据结构】堆
需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。下面我们给出一个数组,这个数组逻辑上可以看做一颗完全二叉树,但是还不是一个堆,现在我们通过算法,把它构建成一个堆。删除堆是删除堆顶的数据,将堆顶的数据跟最后一个数据交换,然后删除数组最后一个数据,再进行向下调整算法。这里我们从倒数的第一个非叶子节点的子树开始调整,一直调整到根节点的树,就可以调整成堆。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。原创 2024-09-17 13:59:12 · 885 阅读 · 0 评论 -
【数据结构】二叉树的遍历
设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。学习二叉树结构,最简单的方式就是遍历。由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtree)和R(Right subtree)又可解释为根、根的左子树和根的右子树。将剩余N-K个元素依次与堆顶元素比完之后,堆中剩余的K个元素就是所求的前K个最小或者最大的元素。原创 2024-09-18 18:26:05 · 755 阅读 · 0 评论 -
【数据结构】排序
将已有序的子序列合并,得到完全有序的序列;稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。原创 2024-09-19 16:23:01 · 1367 阅读 · 0 评论 -
【数据结构】string(C++模拟实现)
【代码】【数据结构】string(C++模拟实现)原创 2024-10-11 16:30:18 · 1078 阅读 · 0 评论 -
【数据结构】vector(C++模拟实现)
public:// 类模板的成员函数// 函数模板 -- 目的支持任意容器的迭代器区间初始化= last)++first;reserve(n);i < n;i < n;i++)// 强制编译器生成默认的// v2(v1)// v1 = v3swap(v);--end;原创 2024-10-17 14:48:08 · 216 阅读 · 0 评论 -
【C++】二叉搜索树
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:最优情况下,二叉搜索树为完全二叉树(或者接近完全二叉树),其高度为:log2Nlog _{2} Nlog2N。最差情况下,二叉搜索树退化为单支树(或者类似单支),其高度为:NNN。所以综合而言二叉搜索树增删查改时间复杂度为:O(N)O(N)O(N)。那么这样的效率显然是无法满足我们需求的,后续介绍二叉搜索树的变形(平衡二叉搜索树AVL树和红黑树),才能适用于我们在内存中存储和搜索数据。另外需要说明的是,二分查找也可以实现O(l原创 2025-03-29 12:37:31 · 1159 阅读 · 0 评论 -
【数据结构】AVL树
*右单旋解决的纯粹的左边高,**但是插入在b子树中,10为跟的子树不再是单纯的左边高,对于10是左边高,但是对于5是右边 高,需要用两次旋转才能解决,以5为旋转点进行一个左单旋,以10为旋转点进行一个右单旋,这棵树 这棵树就平衡了。场景3: (h==0) 场景3:h == 0时,a/b/c都是空树,b自己就是一个新增结点,不断更新5->10平衡因子,引发旋 转,其中8的平衡因子为0,旋转后8和10和5平衡因子均为0。。,因为我们要对b的父亲5为旋转点进行左单旋,左单旋需要动b树中的左子树。原创 2025-03-31 15:13:42 · 306 阅读 · 0 评论 -
【数据结构】红黑树
红黑树是一棵,它的每个结点,可以是红色或者黑色。通过对任何一条从根到叶子的路径上各个结点的颜色进行约束,,因而是接近平衡的。原创 2025-04-01 14:47:24 · 809 阅读 · 0 评论 -
【数据结构】哈希
哈希(hash)又称散列,是一种组织数据的方式。从译名来看,有散乱排列的意思。本质就是,查找时通过这个哈希函数计算出Key存储的位置,进行快速查找。原创 2025-04-02 14:52:07 · 1073 阅读 · 0 评论