当了几年程序员后,有一天我发现我从来没有学过数据结构。

 2024-03-20 02:03:13  阅读 0

介绍

在学习编程时,数据结构是必须掌握的基础知识。 那么数据结构到底是什么?

根据百度百科的解释,数据结构是计算机存储和组织数据的方式。 数据结构是指彼此之间具有一个或多个特定关系的数据元素的集合。 通常,精心选择的数据结构可以带来更高的操作或存储效率。 数据结构通常与高效的检索算法和索引技术相关。

听着,这是人说话吗? 让我给你翻译一下。 事实上,数据结构是用来描述计算机中存储的数据的数学模型。 由于计算机需要存储大量杂乱的数据,因此也需要不同的数据结构来描述。 。

本文思维导图

数组线性表和数组的区别_数组与线性表的关系_数组线性表关系图

为什么要学习数据结构

了解了基本概念之后,我们再来看看为什么要学习数据结构?

在许多类型的程序的设计中,数据结构的选择是基本的设计考虑因素。 许多大型系统的建设经验表明,系统实施的难度和系统建设的质量严重依赖于是否选择最优的数据结构。

很多时候,数据结构一旦确定,算法就很容易得到。 有时事情会朝着相反的方向发展,我们选择一种数据结构来适应特定的算法。 无论哪种情况,选择合适的数据结构都非常重要。

一旦选择了数据结构,算法也就确定了。 系统构建的关键因素是数据,而不是算法。 这种洞察导致了许多软件设计方法和编程语言的出现,面向对象的编程语言就是其中之一。

也就是说,所选择的数据结构往往是解决问题的核心。 比如我们做算法问题的时候,往往需要先确定数据结构,然后根据这个数据结构思考如何解决问题。

没有数据结构的基础知识,谈论算法是没有意义的。 很多时候,即使你使用了一些封装好的编程API,你也不知道它们背后的实现原理。 比如Java中的这些集合类,其实都是JDK封装的基本数据结构。

数组线性表关系图_数组与线性表的关系_数组线性表和数组的区别

如何学习数据结构

第一次接触

第一次接触数据结构课程是4年前。 那时我正在准备考研。 专业课是数据结构和算法。 作为一个非专业课的新手,我对这个东西一无所知。

此时我只有一点C语言基础,基本可以忽略,所以小白也可以按照这个思路来学习。

数据结构基本上是考研必修科目,所以我最初考研都是用复习书。 《天勤数据结构》和《望岛数据结构》两本书是专门为计算机考研而设计的。 可以直接去百度。 这两本书对于我这样的新手来说其实是可以理解的,所以入门还是可以的。

入门学习阶段

一开始我并没有直接看书,而是打算先看视频,因为视频更容易理解。 查找视频的途径是百度,所以当时找到的最好的资源就是《郝斌的数据结构》。 这个视频应该是很久以前录制的了,不过对于初学者来说已经足够了。 它非常基础并且解释得非常仔细。

从最开始的数组、线性表,到栈、队列,再到更复杂的二叉树、图、哈希表,大概有几十个视频。 那时正值暑假,我每天看一个视频。 之后,你要在阅读时时不时地练习一下,这将有助于你理解更多。

看完这一系列视频后,我开始看书。 这些视频都讨论了数据结构的基础知识。 除了基础知识之外,本书还有一些算法主题。 比如你学完线性表和链表,书上就会有相关的算法题,比如数组的元素替换、链表的反转等等,这些以后看似简单的题却让我哭笑不得时间。

幸运的是,大多数问题都有解释。 看完解说,可以抚慰我受伤的心。 记得这本书我考研前至少看了三四遍。

强化学习阶段

完成第一波视频+书籍的学习后,我们应该已经对数据结构有了初步的了解,同时也应该对一些简单的数据结构算法有了了解,比如栈的入栈和出栈,队列的入队和出队,pre -二叉树的顺序遍历及后续遍历、层次遍历、图最短路径算法、深度优先遍历等。

现在我们已经有了一定的基础,那么我们还需要在哪些方面加强学习呢?

这取决于你学习数据结构的目的。 比如你学数据结构是为了做算法问题,那么你就应该重点学习算法知识。 以后我们也会有新的文章来谈。 如何学习算法,敬请期待。

当然,我主要是为了考研复习,所以复习了专业课的往期论文。 例如,我们的论文研究了哈希表、最短路径算法、KMP 算法、霍夫曼算法和最短路径算法的许多应用。 。

对于试卷上的一些知识点,我感觉自己掌握得不太好,就买了《大王数据结构》和一些没用的书来读一遍,再次巩固一下基础。

而且,由于我们复试通常会考一些比较经典的算法题,所以我花了很多时间研究这些算法题。 这些题都不是数据结构的基础算法,所以在以前的书籍和视频中可能找不到。 回答。

于是我在网上搜索了另一个系列的视频,《小乌龟的数据结构视频》。 除了讲解数据结构之外,还讲解了更多经典的算法问题,比如八皇后问题、汉诺塔问题、棋盘上的马等。 、旅行商问题等等,这些问题确实让新手望而却步,而采用视频学习确实更有效。

数组线性表和数组的区别_数组线性表关系图_数组与线性表的关系

练习阶段

纸上学的东西终究是浅薄的,我知道自己还得细细做。 众所周知,算法题和数学题一样,需要多练习,而且考研的时候算法必须手写,所以我经常把算法写(抄)在纸上。 更何况,就算是抄,抄几遍也有帮助。 要了解。

基本算法有很多,比如层次遍历、深度优先遍历、广度优先遍历等。 多写几遍就更容易理解了。 另一个例子是稍微复杂一点的 算法。 如果不写几次,你真的记不住。 。

除了在纸上书写之外,更好的方法是在电脑上打字。 如果你写Java,就用Java,如果你写C++,就用C++。 简而言之,只需使用您擅长的语言即可。 尴尬的是我只懂C,所以只能用devc++来写简单的C语言程序。

至此,我们已经学习了数据结构的基础知识。 至少我们知道各个数据结构的特点,能写出常用的数据结构算法,甚至偶尔还能抽出个八皇后。

数组线性表关系图_数组与线性表的关系_数组线性表和数组的区别

推荐资源

图书

《天勤数据结构》《金道数据结构》如果你想考研,这两本书不要错过

严伟民编着的《数据结构C语言版》本书是本科计算机专业常用教材。 已经很老了,你可以去看看。 还有官方配套教学视频。

《大话数据结构》是一本大家都懂的官方教材,但并不踏实。 本书对于很多新手来说是一本比较适合的入门书。

《数据结构与算法Java版》如果你正在学习Java,想要一本用Java语言描述数据结构的书,可以试试这本书,但这本书显然比较复杂,不适合入门使用。

视频

《郝斌数据结构》这个视频上面提到过。 虽然比较旧,但是入门也足够了。

《小乌龟数据结构与算法》这个视频比较新,也比较全面。 经典算法的教程有很多。 作者也加入了B站,如果大家有兴趣,也可以去B站观看他的视频。

数组线性表关系图_数组线性表和数组的区别_数组与线性表的关系

标签: 算法 结构 数据

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码