![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 71
BLFaker84516
热爱编程、热爱生活!各种DIY设计,有想法,有行动!感谢大家关注收藏,不定期分享好项目源码及教程。
下载后,有问题请及时私信沟通,欢迎提问,欢迎来撩!
展开
-
二叉树遍历解析
二叉树的定义可以先通过下图有一个直观了解。)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”或“右子树”。二叉树的分支具有左右次序,不能随意颠倒。这个图里面,有两个比较特殊的二叉树,分别是编号2和编号3这两个。其中,编号2的二叉树中,叶子节点全都在最底层,除了叶子节点之外,每个节点都有左右两个子节点,这种二叉树就叫做满二叉树。编号3的二叉树中,叶子节点都在最底下两层,最后一层的叶子节点都靠左排列。原创 2023-03-12 10:36:07 · 119 阅读 · 0 评论 -
字符串解题模板
1、如果有前后置空格,那么必须判断临时字符串非空才能输出,否则会输出空串。这类题目可以分为两类,一类是有前置或者后置空格的,另一类是没有前置和后置空格的。2、没有前后置的空格不需要判断空串。原创 2023-03-12 10:36:48 · 61 阅读 · 0 评论 -
数据结构 栈-先进后出
栈和队列都是一种"操作受限"的线性表(逻辑结构),只允许在一端插入和删除数据;栈的特性是先进后出,队列是先进先出。在项目中当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,这时应当首选"栈"这种数据结构。栈的实现有多种方式,可以用数组也可以用链表实现。基于数组实现的栈的C++private :// 定义一个数组 int count;// 栈中元素个数 int n;原创 2023-03-07 22:22:18 · 215 阅读 · 1 评论 -
数据结构队列-先进先出
队列这个概念非常好理解。你可以把它想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进者先出,这就是典型的“队列”。原创 2023-03-07 22:21:38 · 424 阅读 · 1 评论 -
对跳表的深入理解
跳表使用空间换时间的设计思路,通过构建多级索引来提高查询的效率,实现了基于链表的“二分查找”。跳表是一种动态数据结构,支持快速地插入、删除、查找操作,时间复杂度都是OlognO(logn)Ologn。跳表的空间复杂度是OnO(n)On。不过,跳表的实现非常灵活,可以通过改变索引构建策略,有效平衡执行效率和内存消耗。虽然跳表的代码实现并不简单,但是作为一种动态数据结构,比起红黑树来说,实现要简单多了。所以很多时候,我们为了代码的简单、易读,比起红黑树,我们更倾向用跳表。原创 2023-03-05 20:27:15 · 272 阅读 · 0 评论 -
递归-需要满足三个条件
递归是一种应用非常广泛的算法(或者编程技巧)。很多数据结构和算法的编码实现都要用到递归,比如DFS深度优先搜索、前中后序二叉树遍历等。去的过程叫“递”,回来的过程叫“归”。基本上所有的递归问题都可以用递推公式来表示。递归需要满足的三个条件一个问题的解可以分解为几个子问题的解;这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样;存在递归终止条件。递归是一种非常高效、简洁的编码技巧。只要是满足“三个条件”的问题就可以通过递归代码来解决。但是递归代码也比较难写、难理解。原创 2023-03-05 20:27:57 · 1335 阅读 · 0 评论 -
非线性表数据结构_图的表示
邻接矩阵存储方法的缺点是比较浪费空间,但是优点是查询效率高,而且方便矩阵运算。邻接表存储方法中每个顶点都对应一个链表,存储与其相连接的其他顶点。尽管邻接表的存储方式比较节省存储空间,但链表不方便查找,所以查询效率没有邻接矩阵存储方式高。针对这个问题,邻接表还有改进升级版,即将链表换成更加高效的动态数据结构,比如平衡二叉查找树、跳表、散列表等。原创 2023-03-04 21:58:54 · 578 阅读 · 0 评论 -
十大经典排序算法及源码(值得收藏)
十大经典排序算法:https://github.com/lyhxyz/sort选择排序插入排序希尔排序归并排序快速排序堆排序计数排序桶排序基数排序参考资料https://sort.hust.cc/https://github.com/hustcc/JS-Sorting-Algorithm原创 2023-02-25 20:49:43 · 93 阅读 · 0 评论 -
常用数据结构总结-Java版
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dokzp1HQ-1677329125447)(assets/image-20220116142815859.png)]原创 2023-02-25 20:45:53 · 515 阅读 · 0 评论 -
动态库和静态库的区别
一般来说,一个程序,通常都会包含目标文件和若干个库文件。经过汇编得到的目标文件再经过和库文件的链接,就能构成可执行文件。库文件像是一个代码仓库或代码组件的集合,为目标文件提供可直接使用的变量、函数、类等。库文件包含了静态链接库和动态链接库两种。两者最根本的区别在与在程序编译的过程中,如何处理库文件和目标文件的链接关系。原创 2023-02-14 23:40:17 · 292 阅读 · 0 评论 -
C++中extern、static、const、volatile等关键字详解
作用静态变量只初始化一次,未初始化的静态变量会默认初始化为0。静态全局变量只在本文件可见,外部文件无法访问。而静态局部变量只在定义的作用域内可见,但他们的生存周期都是整个程序运行时期。static修饰的函数只允许在当前文件中使用,在其他文件中无法找到该函数的地址。不可以被其他文件引用,且不会与其他文件中的同名函数冲突。常对象:常函数:顶层const和底层const1.顶层const表示指针本身是一个常量。(指针常量)int i = 0;int *const p1 = &i;const int ci =原创 2023-02-13 23:36:50 · 443 阅读 · 0 评论 -
【C++笔试问答】处理各种输入输出的解决方法
注意:数组的最后一个字符会是‘\0’,设接收字符数目为n,如果输入的字符串大于等于n,则实际接收到的输入是字符串的前面n-1个字符,包括空格(不包括回车,遇到回车就结束了),会自动在后面增加一个‘\0’。2、输入的是带空白的字符串,这种情况比较可恶,因为 scanf 和 cin 都是读到空白就结束的,这时候就得使用上面知识点讲到的 getline(cin, string s) 来读取了。cin.get(字符变量符),用来接收字符,只获取一个字符,可以接收空格,遇到回车便结束。,最后一个字符为‘\0’。原创 2023-02-13 23:34:04 · 367 阅读 · 0 评论 -
【C++学习笔记】析构函数彻底理解
虚函数对应一个vtable(虚函数表),类中存储一个vptr指向这个vtable。如果构造函数是虚函数,就需要通过vtable调用,可是对象没有初始化就没有vptr,无法找到vtable,所以构造函数不能是虚函数。下面的不用看了在14_虚函数详解那一节中也有提到,构造函数不能是虚函数,原因是构造函数在创建对象时必须确定对象类型。具体的理解就是:①首先,在创建一个对象时必须确定其类型。因为类型规定了对象可以进行哪些操作,所以创建对象时必须确定类型,以防止一些不恰当的操作,否则编译器就会报错。原创 2023-02-09 23:59:37 · 567 阅读 · 0 评论 -
【C++学习笔记】纯虚函数
因此没有函数体。● 纯虚函数的声明只需在虚函数形参列表后面。原创 2023-02-09 23:58:41 · 345 阅读 · 0 评论 -
【数据结构与算法】7种经典的排序算法原理及C++实现源码
主要的思想就是在每个非叶子节点上,都把其左右孩子中最大的孩子取出来,并让它往上移动,这也是为什么要自底向上构建的原因,先把最底层的元素中较大的往上移,再把倒数第二层较大的元素往上移,逐层向上,就可以保证每个父节点的值都大于其孩子节点的值,也就满足了大顶堆的性质。②选出左右子节点中较大的节点,与父节点比较,若父节点小,则将较大的子节点放在父节点的位置,但不是交换(相当于每向下一层都试图把较大的孩子对应的元素往上移,当不能继续向下时,就把之前保存的根节点值temp填补在最终位置)原创 2023-02-08 21:58:46 · 667 阅读 · 0 评论 -
【数据结构与算法】哈希冲突和解决方法
既然要访问,那肯定需要知道访问的内容存放在哪里,所以这就需要通过一种映射关系将访问元素的关键字和元素的存储地址关联起来,而这种映射关系就是通过哈希函数来实现的。因为通过哈希函数产生的值是有限的,而数据可能比较多,导致通过哈希函数映射后仍有很多不同的数据对应了相同的哈希值,这时候就产生了哈希冲突。**基本思想是:**对于冲突的哈希值,再构造另一个哈希函数进行处理,直至没有哈希冲突,也就是同时使用多个哈希函数来处理。,可以发现,有些原本不同的数据却对应到了相同的哈希值上了,因此发生了冲突。原创 2023-02-08 21:56:56 · 1083 阅读 · 0 评论 -
【数据结构与算法】常见的数据结构及优缺点
堆:创建堆n、插入(上浮)和删除(下沉)都是。原创 2023-02-07 22:55:23 · 290 阅读 · 0 评论 -
【数据结构与算法】图的深度和广度优先搜索
在很多情况下,我们需要遍历图,得到图的一些性质,例如,找出图中与指定的顶点相连的所有顶点,或者判定某个顶点与指定顶点是否相通,是非常常见的需求。有关图的搜索,最经典的算法有深度优先搜索和广度优先搜索,接下来我们分别讲解这两种搜索算法。所谓的深度优先搜索,指的是在搜索时,如果遇到一个结点既有子结点,又有兄弟结点,那么。很明显,在由于边是没有方向的,所以,如果4和5顶点相连,那么4会出现在5的相邻链表中,5也会出现在4的相邻链表中,那么为了。原创 2023-02-07 22:53:45 · 131 阅读 · 0 评论