1.数据结构和算法
文章平均质量分 81
数据结构和算法学习
森林老虎
我曾踏足山巅,也曾进入低谷,二者都让我受益良多
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
0.数据结构和算法是什么?为什么要学?
数据结构和算法入门原创 2022-10-14 23:18:19 · 342 阅读 · 0 评论 -
1.如何衡量算法执行的效率?
数据结构和算法原创 2022-10-15 00:12:35 · 535 阅读 · 0 评论 -
2.时间和空间复杂度
复杂度原创 2022-10-15 00:25:04 · 357 阅读 · 0 评论 -
3.线性表-数组
数组原创 2022-10-15 00:38:08 · 457 阅读 · 0 评论 -
4.链表篇0-头指针、头结点和首元节点详解
链表原创 2022-10-15 01:12:31 · 2352 阅读 · 1 评论 -
5.链表篇1--线性表和链表的基础知识
线性表和链表的基础知识原创 2022-10-15 09:27:13 · 989 阅读 · 0 评论 -
6.链表篇2链表的介绍和实现(单/双链表)
单双链表原创 2022-10-15 11:57:02 · 408 阅读 · 0 评论 -
7.链表篇3单链表带头结(节)点和不带头结(节)点
带不带头结/节点的单链表实现原创 2022-10-15 12:03:03 · 202 阅读 · 0 评论 -
8.链表篇4-环链表和约瑟夫问题
环形链表其实也很好理解,就是将单链表的头和尾连接起来,就形成了环形链表。原创 2022-10-15 22:33:12 · 112 阅读 · 0 评论 -
9.过渡篇-为什么要先讲数组和链表?
前面8篇文章,除了介绍什么是数据结构和算法,为什么要学习以外,就是介绍的数组和链表,为什么要先介绍这2个嘞,为啥不先介绍队列、栈?第一篇文章里我们介绍过数据结构的物理(存储)结构和逻辑结构,理解了数据和链表之后,接下来我们就开始新的篇章,先进入栈。原创 2022-10-15 23:20:04 · 140 阅读 · 0 评论 -
10.线性表之栈的概念及Java实现栈(顺序栈和链式栈)
后进先出法,简称 LIFO,last in first out;。1、栈的操作端通常被称为栈顶,另一端被称为栈底。2、栈的插入操作称为进栈(压栈|push);栈删除操作称为出栈(弹栈|pop)。栈就像一个杯子,我们只能从杯口放和取,所以栈中的元素是“先进后出”的特点。顺序存储的栈称为顺序栈;链式存储的栈称为链式栈。实际上,栈就可以用数组来实现,也可以用链表来实现。用数组实现的叫做顺序栈,用链表实现的叫做链式栈。原创 2022-10-16 00:47:29 · 372 阅读 · 0 评论 -
11.线性表-队列
栈和队列都是有操作限制的一种线性表。原创 2022-10-16 11:34:51 · 277 阅读 · 0 评论 -
12.散列表
首先,链表法对内存的利用率比开放寻址法要高。因为链表结点可以在需要的时候再创建,并不需要像开放寻址法那样事先申请好。实际上,这一点也是我们前面讲过的链表优于数组的地方。链表法比起开放寻址法,对大装载因子的容忍度更高。开放寻址法只能适用装载因子小于 1 的情况。接近 1 时,就可能会有大量的散列冲突,导致大量的探测、再散列等,性能会下降很多。但是对于链表法来说,只要散列函数的值随机均匀,即便装载因子变成 10,也就是链表的长度变长了而已,虽然查找效率有所下降,但是比起顺序查找还是快很多。原创 2022-10-16 12:11:29 · 142 阅读 · 0 评论 -
13.跳表
不过,天下没有免费的午餐,这种查询效率的提升,前提是建立了很多级索引,也就是我们在第 6 节讲过的空间换时间的设计思路。跳表的空间复杂度分析并不难,我在前面说了,假设原始链表大小为 n,那第一级索引大约有 n/2 个结点,第二级索引大约有 n/4 个结点,以此类推,每上升一级就减少一半,直到剩下 2 个结点。按照我们刚才讲的,每两个结点会抽出一个结点作为上一级索引的结点,那第一级索引的结点个数大约就是 n/2,第二级索引的结点个数大约就是 n/4,第三级索引的结点个数大约就是 n/8,依次类推,也就是说,原创 2022-10-16 12:31:13 · 279 阅读 · 1 评论 -
14.树-介绍和基本概念
概念:为什么要使用树结构?在说为什么之前,我们先来看一下前面介绍过的数组和链表的结构有哪些优缺点数组的优缺点:有小伙伴可能就会说可以使用集合的形式来存储数据,我们来ArrayList来举例链表的优缺点链表的优缺点跟数组正好相反在第9章中我们讲过一篇过渡篇,为什么先讲数组和链表,我们知道数据和链表是数据结构中的基础,也是存储结构的体现,数组和链表既可以说是物理结构也可以说是一种逻辑结构,但是树是一种逻辑结构,我们可以用数组和链表去实现树这种逻辑结构,下一篇专门讲解这块。下面进入树的整体介绍和认识:树是原创 2022-10-16 15:01:50 · 880 阅读 · 0 评论 -
15.树的存储和遍历
初学数据结构的朋友可能会感到疑惑,到底什么是树呢?其实在现实生活中有很多体现树逻辑的例子。最好的一个例子就是“家谱图”,这就是一个“树”。例如企业里的职级关系,也是一个“树”类似的例子还有很多,这里就不一一列举了。不知道细心的朋友们,是否发现以上这些例子有什么共同点呢?为什么可以称它们为“树”呢?因为它们都像自然界中的树一样,从同一个“根”衍生出许多“枝干”,再从每一个“枝 干”衍生出许多更小的“枝干”,最后衍生出更多的“叶子”。在数据结构中,树的定义如下。原创 2022-10-17 00:14:12 · 476 阅读 · 0 评论 -
16.堆和优先队列(Java)
先将元素插入到堆的末尾,即最后一个孩子后。插入之后如果堆的性质被破坏,将新插入节点顺着双亲往上调整至合适位置即可。原创 2022-10-25 21:04:24 · 184 阅读 · 1 评论 -
17.补充:树和二叉树分支关系与层次结构下,如何有效实现增删查?
本节的内容围绕着不同种类树的原理、二叉树对于数据的增删查操作展开。要想利用二叉树实现增删查操作,你需要熟练掌握二叉树的三种遍历方式。遍历的时间复杂度是 O(n)。有了遍历方式之后,你可以完成在指定位置的数据增删操作。增删操作的时间复杂度都是 O(1)。对于查找操作,如果是普通二叉树,则查找的时间复杂度和遍历一样,都是 O(n)。如果是二叉查找树,则可以在 O(logn) 的时间复杂度内完成查找动作。树结构在存在“一对多”的数据关系中,可被高频使用,这也是它区别于链表系列数据结构的关键点。原创 2022-10-26 21:51:14 · 142 阅读 · 0 评论 -
18.Java数据结构-图详解
1)前面我们学了线性表和树2)线性表局限于一个直接前驱和一个直接后继的关系3)树也只能有一个直接前驱也就是父节点4)当我们需要表示多对多的关系时, 这里我们就用到了图。转载 2022-10-26 21:57:29 · 292 阅读 · 0 评论 -
19.数据结构和算法的交叉口,下一章进入算法介绍
学习数据结构和算法的过程,是非常好的思维训练的过程,所以,千万不要被动地记忆,要多辩证地思考,多问为什么。如果你一直这么坚持做,你会发现,等你学完之后,写代码的时候就会不由自主地考虑到很多性能方面的事情,时间复杂度、空间复杂度非常高的垃圾代码出现的次数就会越来越少。如果需要刷题,这里也给大家推荐一个非常好的免费刷题网站牛客题库:(415题)原创 2022-10-26 22:14:24 · 622 阅读 · 0 评论
分享