![](https://img-blog.csdnimg.cn/a2fa40c0fe73451e8f6eef6b11d24058.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
《“深入浅出”数据结构》
文章平均质量分 89
🧡💛💚:本专栏对数据结构由浅入深进行讲解,同时每章节学完后会挑选此章节最经典例题进行分析与阐述,力求让大家都更好理解数据结构的本质!!!👨🏻💻
Fan~Fan
舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功! 没有人会关乎你做过多少努力,撑得累不累,摔得痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷。
展开
-
归并排序和计数排序
本文主要讲解归并排序和计数排序的实现原理。原创 2022-08-04 09:39:42 · 195 阅读 · 4 评论 -
交换排序—冒泡排序和快速排序
本文主要讲解冒泡排序和归并排序。原创 2022-08-02 10:08:39 · 2119 阅读 · 7 评论 -
选择排序—直接选择排序和堆排序
本篇博文主要讲选择排序和堆排序。原创 2022-07-28 09:00:42 · 454 阅读 · 1 评论 -
插入排序—直接插入排序和希尔排序
本篇博文主要讲解插入排序和希尔排序算法的原理原创 2022-07-26 09:13:30 · 320 阅读 · 11 评论 -
二叉树OJ练习
📣大部分关于二叉树的OJ题都涉及分治与递归思想,同时这些也是二叉树的基础,接下来的一些OJ题将这些思想运用的淋漓尽致,相信你看完以后对这种思想也理解的更加深刻同时也能进一步的掌握二叉树的结构。......原创 2022-07-18 08:04:37 · 400 阅读 · 6 评论 -
数据结构“入门”—链式二叉树
本文主要讲解链式二叉树的实现。原创 2022-07-11 09:49:25 · 523 阅读 · 1 评论 -
堆的应用—堆排序和TopK问题
在上篇文章中我们大致讲了堆的实现过程,本篇文章我们主要讲的是堆的最常见应用—堆排序和TopK问题。原创 2022-07-08 13:00:23 · 347 阅读 · 3 评论 -
数据结构“入门”—堆的实现
📣📣本文主要讲述的是用二叉树实现堆。原创 2022-07-04 20:43:12 · 417 阅读 · 0 评论 -
数据结构“入门”—树与二叉树
本文主要讲的是树与二叉树的基本理论知识。原创 2022-07-03 10:04:40 · 381 阅读 · 0 评论 -
栈和队列面试题
一:括号匹配问题原题链接:力扣思路:括号匹配问题为栈的经典例题。因为栈遵循的规则是后进先出,所以对于此道题我们可以创建一个栈,然后开始进行遍历字符串,如果字符为左括号“(”、“[”、“{”,则入栈;如果字符为右括号“)”、“]”、“}”,则栈中的栈顶元素(左括号)出栈与右括号进行匹配,如果不匹配则报错,匹配则继续遍历匹配,直到遍历完字符串。遍历完后我们还需要检查栈是否为空,如果为空则均匹配,不为空则未完成匹配。//创建栈typedef int......原创 2022-04-18 07:35:26 · 474 阅读 · 27 评论 -
链表OJ面试题浅刷< 2 >(较难)
一 链表的回文结构原题链接:链表的回文结构_牛客题霸_牛客网 (nowcoder.com)⭐:回文结构也就是对称结构,即一串结构正着读和反着读一模一样。例如:1 2 2 1 或者 1 2 3 2 1思路:先找到链表的中间结点,然后再对链表中间结点往后的结点进行逆置。逆置后与中间结点前面的结点进行比较。(求链表中间结点和链表逆置在上篇博客已经讲过,这里不再过多赘述.)注:因为C++包容C,所以题解用的C语言写的。/*struct ListNode { int ..原创 2022-04-12 09:07:29 · 413 阅读 · 44 评论 -
数据结构“入门”—队列(C语言实现)
1:队列的概念和结构队列的概念📝队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out)的原则。入队列:进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为队头。队列的结构📝⭐先进先出:入队顺序:A B C D 出队顺序:A B C D应用场景📝栈:解决括号匹配;逆波兰表达式求解;递归改非递归等等。队列:公平排队,广度优先遍历等等。2:队列的实现🖊:队列的...原创 2022-04-10 13:53:29 · 4082 阅读 · 7 评论 -
数据结构“入门”—栈(C语言实现)
📭今天我们讲数据结构里面的栈,有了顺序表的基础后学习栈那真是唰唰唰的瞬间理解这些东西,非常的easy~~1:栈的基本概念和结构栈的概念📝栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,(入数据在栈顶)出栈:栈的删除操作叫做出栈。(出数据也在栈顶)栈的结构📝🤔函数的调用...原创 2022-04-08 08:15:00 · 1101 阅读 · 47 评论 -
链表界的“扛把子”—双向带头循环链表
一:链表的分类链表的分类分为以下几种:在实际中链表的结构非常多样,以上情况组合起来就有8种链表结构。我们在前面已经讲过最简单的结构:单向无头非循环链表。并且在我们所刷的OJ题里也涉及到了有无头结点情况,今天我们讲解最复杂结构:双向带头循环链表。在我们讲解之前我们先了解一下这两种结构在链表界的重要性。1:无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。2:带头双向循环链表:结.原创 2022-04-05 08:52:12 · 1092 阅读 · 85 评论 -
链表OJ经典题浅刷< 1 >(看完不再害怕链表题)
一 移除链表元素原题链接:203. 移除链表元素 - 力扣(LeetCode) (leetcode-cn.com)思路:我们可以创建一个指针变量cur来遍历链表,当cur->val==val时,我们就需要删除此结点,但链表是连续的,free结点的同时还需要保留上一个结点的地址,所以我们用指针变量prev来保存上一个结点的地址,同时我们做这道题也要考虑到特殊情况,比如头结点就是所要删除的结点,以及链表中间有好几个结点都是需要删除的结点。错误代码:struct ListNo..原创 2022-04-01 11:38:43 · 2511 阅读 · 99 评论 -
数据结构“入门”—单链表(C语言实现)
1:前言🍎单链表是顺序表的进一步拓展,学好单链表同时也为我们后面学好双向链表打好基础,那单链表相对于顺序表来说有哪些优点,既然单链表比顺序表更加完善我们又为何要引入顺序表概念呢?下面我们详谈一下顺序表相对于单链表的优缺点。优点: 顺序表是连续的一段物理空间,更加方便下标的随机访问。缺点:插入数据,空间不足时要扩容,扩容会导致性能的消耗。 头部或者中间位置插入或者删除数据时,需要挪动数据,效率较低。 空间不能现创现用,顺序表的扩容是以双倍增长,开辟的部分空间会产生浪费,同时频..原创 2022-03-26 16:01:25 · 2725 阅读 · 28 评论 -
LeetCode浅刷—顺序表经典题
一:移除元素原题链接:27. 移除元素 - 力扣(LeetCode) (leetcode-cn.com)这道题乍一看觉得挺简单,但对于初学者来说看到仅使用O(1)额外空间估计就挺懵的了。下面我们将循序渐进讲解这道题目。法一:数据覆盖我们可以从数组第一个元素开始依次进行遍历,当我们遍历到的数组元素为val,此时我们将val后面的元素都向前挪一位,最终将val覆盖,覆盖完我们继续进行覆盖与遍历,直到把val覆盖完。但此种方法虽空间复杂度为O(1),但其时间复杂度却为O(N^2).注:最原创 2022-03-28 16:59:40 · 1077 阅读 · 8 评论 -
数据结构“入门”—手撕顺序表
一:顺序表基本概念概念及结构:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。类别:1.静态顺序表:使用定长数组存储元素。2. 动态顺序表:使用动态开辟的数组存储。❗:顺序表要求存储的数据是从下标0开始,依次连续存储,中间不能用空位。接口实现:静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分..原创 2022-03-20 11:25:40 · 395 阅读 · 41 评论 -
数据结构“入门”—空间复杂度
1:前言💬:今天我们来讲解数据结构里面的空间复杂度,在讲解空间复杂度之前我们先通过一道例题来 回顾一下时间复杂度q(≧▽≦q)♥。2:时间复杂度回顾原创 2022-03-10 09:10:48 · 1781 阅读 · 9 评论 -
数据结构“入门”—时间复杂度
( •̀ ω •́ )✧今天我们来学习一下数据结构最初始部分-时间复杂度。1:为什么要引入时间复杂度概念?算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一 个算法执行所耗费的时间,从理论上说,是不能算出.原创 2022-03-06 12:08:34 · 1086 阅读 · 11 评论