数据结构大总结!

本文介绍了数据结构的基础概念,包括线性结构(数组、链表)、栈、队列、树(如红黑树)和图等。数据结构是算法的基石,对于编程至关重要。学习数据结构可以通过阅读书籍、观看在线课程并动手实践来加深理解。推荐书籍如《大话数据结构》、《算法4》等,以及课程《数据结构与算法之美》。同时,通过实践编写代码,如实现链表操作或二叉树遍历,能有效提升技能。文章建议使用可视化工具如visuAlgo进行辅助学习。
摘要由CSDN通过智能技术生成

前几天,小灰给大家介绍了什么是算法

说到算法,就不能不说起数据结构。今天我来讲一讲,什么是数据结构?程序员怎么学好数据结构?

我们介绍算法的时候说过,计算机当中的算法,本质就是一系列程序指令,用以解决特定的运算和逻辑问题。

而所谓数据结构,是数据的组织、管理和存储格式。简单理解的话,数据结构就是执行算法的“原材料”。

俗话讲,巧妇难为无米之炊。算法,就好比是聪明勤劳的女主人,而数据结构,就是用来做饭做菜的柴米油盐。

47ce9e7a0b11fe0359210c7001db22f4.png

数据结构都有哪些组成方式呢?

首先,是线性结构

但凡有过一点编程基础的小伙伴,肯定都知道数组,这就是一种典型的线性数据结构。

c9f5419cf3e79a2209e7861464c680b0.png

除了数组以外,链表也是一种重要的数据结构。Java集合框架中的LinkList类,底层实现就是链表。

b360369313fc3f83776f0715489e8167.png

以数组或者链表为基础,可以封装出两种数据结构,一个是,它的特点是先进后出;另一个是队列,它的特点是先进先出。栈和队列,可以满足不同的特定需求。

7d45bbe74f6fe8fa71283199c45f0937.png

074085b1a609490ae2fa5f4d4c4f4080.png

其次,是

树,是一类一对多的数据结构,天生就非常适合用来检索。Java集合框架当中有一个TreeMap类,用于存储键和值的映射,不但查找很高效,还能保证键的有序排列。它的底层实现就是一种名为红黑树的特殊二叉树。

67b3b3dd651017e0236ffeae102e7263.png

另外,我们操作系统当中的文件索引,有很多都是用B树实现的。

5d2447a3830dbefdd6a3d6be114a21b6.png

而我们常用的MySQL数据库,以B+树作为常用索引。

cdd5a1203c213df14a2df5f8099b6236.png

再其次,是

图,是一类多对多的数据结构,非常适合用于表述众多对象之间的复杂关系。大家肯定都乘坐过地铁,一个城市的地铁交通线路,站与站之间形成的关联,就是一个图结构。

de51f0577bc19ebcc4a4e4cb3459873d.png

在一群人之间,有着复杂的人际交往关系,他们所形成的的关系网络也是一个图结构。

ebab1007860a11ba2e5c3ae549a27f36.png

在图的基础上,产生了许多实用的算法。比如,我们用百度地图或者高德地图进行导航的时候,背后就是图的最短路径算法

最后,还有一些复合数据结构

比如咱们常用的哈希表,它的组成就是数组和链表的结合。

e99f957d7a2f9a0dbfd77f9ba77ed845.png

还有一种比较有意思的数据结构叫做跳表,它在普通链表的基础上,增加了很多个索引层。Redis当中的集合 sortedSet,背后的数据结构就是跳表。

08d79989e9856a1e5ffe084088725e85.png

复合数据结构,往往结合了多种基础数据结构当然优势,在特定的场景下非常有用。

这就是数据结构的几种组成方式,大家可以把这张图保存一下。由于篇幅原因,图里面所列出的具体数据结构,只是最最常用的几种,并非全部。

bc2e91b55d490aed5aac230243d402db.png

那么,我们该如何学好数据结构呢?

就像学习算法一样,我们同样可以通过看书、看网上的视频课程,来了解常用的数据结构原理。

入门级别的书,比较推荐程杰老师的《大话数据结构》,以及我自己出版的《漫画算法》系列。

ee62386af44da18680ba48d295c589a9.png

进阶级别的书,推荐看看《算法4》、《算法导论》。

课程的话,推荐极客时间王争老师的《数据结构与算法之美》,讲的非常全面。

此外,我们也可以动手去写代码,自己实现数据结构的基本功能,这样印象会很深刻。

像红黑树这么复杂的数据结构,一上来可能很难直接写出来。我们可以从简单的开始,比如尝试实现一个链表的添加节点和删除节点功能,比如实现二叉树的前序、中序、后序遍历,等等。

最后,有些网站,会提供可视化的数据结构演示,非常生动。小伙伴们可以去这些网站看看。比如visuAlgo这个网站,就有着很丰富的案例。

970d56da35870f0f510cc1c5920f6020.png

大家还关注过哪些算法与数据结构的教学网站,也欢迎在留言区写出。

好了,关于数据结构,我就给大家介绍到这里。如果觉得这篇文章对你有帮助,希望可以点个在看点个,感谢大家~~

最近,小灰尝试走出舒适区,入驻B站开始录制程序员相关的视频。欢迎大家关注小灰的B站号【我是程序员小灰】,给个一键三连,感谢支持哦~~

  • 12
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值