数据结构
文章平均质量分 84
ZhangBlossom
低头赶路,敬事如仪
展开
-
【数据结构C/C++】优先(级)队列
下面的内容来自于百度百科。如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了。这样,我们就引入了优先级队列这种数据结构。优先级队列(priority queue)是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素。原创 2023-10-16 20:51:44 · 539 阅读 · 0 评论 -
【数据结构C/C++】十大排序算法的实现思路以及易写易记忆版代码实现
重要的排序算法的代码建议版实现原创 2023-10-15 21:55:08 · 759 阅读 · 1 评论 -
【数据结构C/C++】根据前序中序和中序后续遍历结果生成二叉树
根据前序中序和中序后续遍历结果生成二叉树原创 2023-10-10 21:36:48 · 431 阅读 · 0 评论 -
【考研408真题】2022年408数据结构41题---判断当前顺序存储结构树是否是二叉搜索树
【考研408真题】如何判断当前链式与顺序存储结构的树是否是一个二叉搜索树呢?原创 2023-10-10 20:11:25 · 1263 阅读 · 2 评论 -
【数据结构C/C++】顺序与链式二叉树创建与前中后、层序遍历
考研408数据结构之顺序和链式存储二叉树的创建、前中后以及层序遍历原创 2023-10-10 13:31:33 · 354 阅读 · 0 评论 -
【数据结构C/C++】图操作之邻接矩阵与邻接表的深度优先遍历
邻接表:邻接矩阵,也就是使用二维数组用来存放每个顶点与对应边的关系,例如两个顶点存在边,那么就将这个二维数组对应的下标设置为一个非0值。如下图:无向图情况:有向图情况:邻接矩阵是一种不错的图存储结构,但是对于边数使用较少的图,比较浪费存储空间,比如下面这种情况:而学习线性表的时候我们都知道顺序存储结构浪费空间,所以引出了链式存储结构来节约空间。因此,同样的我们可以对弧或边使用链式存储结构来避免空间浪费的问题。于是我们引出了新的图存储结构,邻接表。原创 2021-11-28 21:00:47 · 17295 阅读 · 1 评论 -
【数据结构C/C++】顺序与链式队列详解(附代码)
文章目录前言一、顺序队列二、链式队列1.引入库2.读入数据总结前言队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First Input First Ouput),的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。既然是线性表,那么就可以分为顺序存储结构和链式存储结构。队列存储结构的实现有以下两种方式:顺序队列:在顺序表的基础上实现的队列结构;链队列:在链表的基础上实现的队列结构;原创 2021-08-17 09:39:03 · 9539 阅读 · 2 评论 -
【数据结构C/C++】约瑟夫环以及约瑟夫生死者游戏的C/Java代码实现
文章目录前言一、概念了解二、实验设计1.链表初始化2.功能实现总结前言约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…,n 表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 开始,还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,直到圆桌上剩余一个人。如图所示,假设此时圆周周围有 5 个人,要求从编号为 3 的人开始顺时针数数,数到 2 的那个人出列:出列顺序依次为:编号为 3 的人开.原创 2021-08-10 16:59:58 · 9676 阅读 · 1 评论 -
【数据结构C/C++】详解线性表之链式与顺序存储结构增删改查的实现方式(附代码)
文章目录前言一、顺序存储结构1:建立一个包含数组的结构体2:获得元素(从数组中获取所需元素)3:插入元素4:删除元素二、链式存储结构(方法1)1.创建承载数据的载体2:创建链表2.显示链表数据3:删除链表数据4:插入数据二、链式存储结构(方法2)1:结构体创建2:创建链表3:删除链表4:获取元素5:插入元素6:删除元素推荐学习网站前言链表,作为数据结构中非常重要的一种算法,有着诸多用途,因此写下本文记录自己的学习过程。参考书籍《大话数据结构第二版》一、顺序存储结构我们知道,数组最大的特点就.原创 2021-07-30 14:50:49 · 7901 阅读 · 1 评论 -
【数据结构C/C++】中序线索二叉树的实现(源代码以及讲解)
概念 传统的使用二叉链表实现的二叉树由于会有n+1个空间没有使用上,因此我们可以在该二叉树上使用其没有使用的空指针域,让这些指针域指向该节点的前驱或后继节点,以实现空间最大利用率,同时这种新的二叉树在需要知道某个之间的前驱或后继节点也更加的方便自如,那么这种二叉树就叫做—线索二叉树,我们规定,如果某个节点的左孩子为空,则其左孩子的指针域改为指向其前驱节点,如若右孩子为空,那么右孩子的指针域指向该节点的后继节点。实例先对这棵树中序遍历,之后就可以知道每一个结点的前驱和后继节点了。然后根据上面的规则我原创 2021-11-18 21:00:09 · 10111 阅读 · 1 评论 -
【数据结构C/C++】C语言哈夫曼编码与解码实现细则(附代码以及详细实现解释)
哈夫曼树作为最常见的考研树题目,拥有强大的压缩功能。这篇文章将带你了解哈夫曼树如何实现编码与解码原创 2021-11-21 15:01:10 · 18895 阅读 · 0 评论 -
【数据结构C/C++】C语言实现哈夫曼树的译码以及编码
先附上代码效果图:哈夫曼编码讲解前言:先来吐个槽,相对于编码,解码应该是更加烧脑的一个过程,在不使用string类型,纯c语言的方法下,解码效率本身就低,还需要用到大量的for循环去得到编码是真的心累,就一个解码花了我两个小时,晕倒,但是最后解码成功是真的让人喜悦,不多bb,开始教程。首先如果想要理解接下来的代码,那么先看一眼我之前的哈夫曼编码的代码,因为我是基于编码上修改的。密文输入:密文的输入很简单。直接贴代码,相信大家都能看得懂可能比较难以理解的就是if里面for循环的部分,其实意思也原创 2021-11-29 22:37:25 · 11243 阅读 · 0 评论 -
【数据结构C/C++】稀疏矩阵的压缩
稀疏矩阵(Sparse Matrix)是一种矩阵,其中大多数元素都是零。与稠密矩阵相比,稀疏矩阵具有许多零元素,因此存储和处理它们可能会浪费大量的存储空间和计算资源。为了优化稀疏矩阵的存储和处理,可以采用以下方法:压缩存储:压缩稀疏矩阵(Compressed Sparse Matrix):只存储非零元素及其位置信息,以减少存储空间的使用。通常需要存储非零元素的值、行索引和列索引。原创 2023-10-09 18:13:50 · 638 阅读 · 0 评论 -
【数据结构C/C++】顺序栈和链栈详解(附代码)
文章目录前言一、栈的顺序结构及其实现1:顺序栈概念理解2:入栈(压栈)实现方法3:出栈(弹栈)及其实现方法4:顺序栈输出其数据5:主函数二、栈的链式存储结构1.链栈概念理解2.初始化链栈3.链栈元素入栈4.链表元素出栈5.显示链栈元素6.主函数三、链栈与顺序栈优缺点对比前言栈是限定仅在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO原创 2021-08-11 14:33:36 · 10599 阅读 · 0 评论 -
【数据结构C/C++】双向链表的增删改查
对我个人而言,在开发过程中使用的比较多的就是双向链表了。很多重要的代码优化都会使用到基于双向链表实现的数据机构。比如我们常用的HashMap,我们知道Key其实是无序存放的,而LinkedHashMap底层使用HashMap+双向链表的方式实现了对key的有序遍历。双向链表的一些重要特点和优点:双向遍历:双向链表具有两个指针,一个指向前一个节点(前驱),一个指向后一个节点(后继)。这使得在链表中的任何位置都可以轻松地进行双向遍历,而不仅仅是单向遍历。原创 2023-10-09 17:26:21 · 364 阅读 · 0 评论 -
【数据结构C/C++】多维数组的原理、访问方式以及作用
在C语言中,多维数组的存储实际上是在内存中按照一维数组的方式连续存储数据的。多维数组的底层原理可以理解为是一维数组的扩展。每个维度的大小(元素个数)决定了存储空间的布局。考虑一个二维数组的例子,例如int arr[3][4],表示一个3行4列的整数数组。底层存储原理如下:首先,内存中会分配一个连续的存储空间,大小为3 * 4 * sizeof(int)字节,其中sizeof(int)表示一个整数占用的字节数。原创 2023-10-09 17:24:31 · 1926 阅读 · 0 评论 -
【考研408常用数据结构】C/C++实现代码汇总
考研408常用数据结构代码与实现思路(持续更新中!!!)原创 2023-10-08 12:19:42 · 1396 阅读 · 0 评论 -
【数据结构C/C++】链式存储与顺序存储结构栈
下面这篇文章是我大二时候写的比较详细的实现过程,再这篇文章我也会再一次比较简单的再次简述一下链式与顺序存储结构的实现方式。这里我就不使用C++再一次实现这两个栈了,有兴趣的也可以使用C++的STL库中的stack直接实现。实现思路如下:首先,我们定义了一个节点结构Node,每个节点包含一个整数数据和指向下一个节点的指针。然后,我们定义了栈结构Stack,其中包括一个指向栈顶节点的指针top和一个表示栈大小的整数size。原创 2023-10-09 16:35:47 · 607 阅读 · 1 评论 -
【数据结构C/C++】单向链表的增删改查
单向链表是比较常用的数据结构,最近再面试手撕算法的时候偶尔有遇到,所以就花了一点时间简单的写了一下C/C++版本的单向链表的代码。这里我推荐使用C++版本,因为C++版本我特地优化了一下,提供了用户输入的功能,当然两个语言差异不大,注释可以直接看C版本的,比较容易理解。原创 2023-10-08 12:02:05 · 614 阅读 · 0 评论 -
【算法】链表
链表的几种常用算法原创 2023-06-20 15:58:17 · 94 阅读 · 0 评论 -
【Java项目】使用LruCache提高DSP广告主需求方 (Demand Side Platform)系统性能
使用LruCache提高DSP系统性能原创 2023-06-17 10:01:09 · 500 阅读 · 0 评论 -
【Java项目】1000w数据量的表如何做到快速的关键字检索?
如何不使用ES来做到快速的关键字查询功能?原创 2023-06-12 18:52:25 · 2616 阅读 · 2 评论 -
【算法】递归解决各种数据结构的遍历问题
使用递归完成各种数据结构的遍历原创 2023-06-10 11:50:18 · 1009 阅读 · 0 评论 -
【算法】使用队列制作一个栈
使用一个或者两个队列来制作一个栈原创 2023-06-10 11:00:33 · 1295 阅读 · 0 评论 -
【算法】去除字符串中间的多余空格以及反转字符串的几种方法
Java中去除字符串中多余空格的方法原创 2023-06-07 10:12:14 · 678 阅读 · 0 评论 -
【算法】位运算常用算法以及知识点
算法中位运算的作用原创 2023-06-03 21:24:41 · 460 阅读 · 1 评论 -
【算法】双指针及其使用场景
双指针及其应用场景原创 2023-05-29 15:15:35 · 957 阅读 · 0 评论 -
【算法】滑动窗口
滑动窗口问题原创 2023-05-29 14:18:32 · 539 阅读 · 0 评论 -
【算法】查找算法
查找算法原创 2023-05-29 10:40:24 · 85 阅读 · 0 评论 -
【算法】单调栈问题
单调栈问题原创 2023-05-28 13:39:52 · 870 阅读 · 0 评论 -
【算法】用递归的方法逆序输出或倒置一个栈
使用递归的方式逆序和倒置一个栈原创 2023-05-27 15:51:06 · 773 阅读 · 0 评论 -
【算法】简单讲解如何使用两个栈实现一个队列
使用两个栈实现一个队列原创 2023-05-27 15:08:46 · 1328 阅读 · 0 评论 -
【算法】LFU及其优化
LFU算法及其优化原创 2023-05-27 13:43:02 · 2765 阅读 · 0 评论 -
【算法】非递归堆排序判断字符串中所有字符是否只出现一次
非递归桶排序完成无额外空间复杂度判断字符串所有字符是否只出现一次原创 2023-05-25 13:11:45 · 84 阅读 · 0 评论 -
【算法】不使用LinkedHashMap实现一个LRU缓存
Java实现LRU算法,并且不使用LInkedHashMap原创 2023-05-26 13:29:08 · 1037 阅读 · 0 评论 -
【算法】通过递归和非递归实现树的前中后序以及广度优先搜索和深度优先搜索
树的前中后序以及BFS和DFS原创 2023-05-14 14:28:19 · 827 阅读 · 0 评论 -
【算法】数组合并去重算法
之后,当某一条链表的元素都被添加到头节点后,会存在一条链表的元素还没有被添加到头节点,但是由于链表有序,因此这个剩下的元素,一定都比头节点中的元素大于或者等于,因此直接插入到头节点中即可。如果右指针指向的元素不等于 val,它一定是输出数组的一个元素,我们就将右指针指向的元素复制到左指针位置,然后将左右指针同时右移;也就是,如果遍历的指针(右指针)遇到的值等于val,那么直接忽略,但是如果遇到的值不是,那么就把这个值覆盖到左指针指向的位置。既然也是不能创建临时数组,那么就要考虑把特定值给他覆盖掉。原创 2023-01-15 22:39:17 · 1849 阅读 · 0 评论