本文首发于微信公众号【程序员黄小斜】c++
本文做者:黄小斜程序员
转载请务必在文章开头注明出处和做者。面试
学习编程,数据结构是你必需要掌握的基础知识,那么数据结构究竟是什么呢?算法
根据百度百科的介绍,数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。一般状况下,精心选择的数据结构能够带来更高的运行或者存储效率。数据结构每每同高效的检索算法和索引技术有关。
听听这是人话么,我帮大家翻译一下,其实数据结构就是用来描述计算机里存储数据的一种数学模型,由于计算机里要存储不少乱七八糟的数据,因此也须要不一样的数据结构来描述。编程
了解了基本概念以后,接下来咱们再来看看,为何咱们要学习数据结构呢?api
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验代表,系统实现的困难程度和系统构造的质量都严重的依赖因而否选择了最优的数据结构。数组
许多时候,肯定了数据结构后,算法就容易获得了。有些时候事情也会反过来,咱们根据特定算法来选择数据结构与之适应。不论哪一种状况,选择合适的数据结构都是很是重要的。微信
选择了数据结构,算法也随之肯定,是数据而不是算法是系统构造的关键因素。这种洞见致使了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。数据结构
也就是说,选定数据结构每每是解决问题的核心,好比咱们作一道算法题,每每就要先肯定数据结构,再根据这个数据结构去思考怎么解题。架构
若是没有数据结构的基础知识,也就没有谈算法的意义了,不少时候即便你会使用一些封装好的编程api,但你殊不知道其背后的实现原理,好比hashmap,linkedlist这些Java里的集合类,实际上都是JDK封装好的基础数据结构。
我第一次接触数据结构这门课仍是4年前,那这时候我在准备考研,专业课考的就是数据结构与算法,做为一个非科班的小白,对这个东西能够说是一窍不通。
这个时候的我只有一点点c语言的基础,基本上能够忽略不计,因此小白同窗也能够按照这个思路进行学习。
数据结构基本上是考研的必考科目,因此我一开始使用的是考研的复习书籍,《天勤数据结构》和《王道数据结构》这两个家的书都是专门为计算机考研服务的,能够直接百度,这两本书对于我这种小白来讲竟然都是能够看懂的,因此,用来入门也是ok的。
最先的时候我并无直接看书,而是先打算先看视频,由于视频更好理解呀,找视频的办法就是百度,因而当时找到的最好资源就是《郝斌的数据结构》这个视频应该是很早以前录制的了,可是对于小白来讲是够用的,特别基础,讲的很仔细。
从最开始的数组、线性表,再讲到栈和队列,以及后面更复杂的二叉树、图、哈希表,大概有几十个视频,那个时候正值暑假,我按照天天一个视频的进度看完了,看的时候还得时不时地实践一下,更有助于理解。
看完了这个系列的视频以后,我又转战开始啃书了,视频里讲的都是数据结构的基础,而书上除了基础以外,还有一些算法题目,好比你学完了线性表和链表以后,书上就会有相关的算法题,好比数组的元素置换,链表的逆置等等,这些在往后看来很容易的题目,当时把我难哭了。
好在大部分题目是有讲解的,看完讲解以后还能安抚一下我受伤的心灵。记住这本书,我在考研以前翻了至少有三四遍。
完成了第一波视频+书籍的学习以后,咱们应该已经对数据结构有了初步的了解了,对一些简单的数据结构算法也应该有所了解了,好比栈的入栈和出栈,队列的进队和出队,二叉树的先序遍历和后续遍历、层次遍历,图的最短路径算法,深度优先遍历等等。
有了必定的基础以后,咱们须要对哪方面进行强化学习呢?
那就要看你学习数据结构的目的是什么了,好比你学习数据结构是为了能作算法题,那么接下来你应该重点去学习算法方面的知识,后续咱们也将有一篇新的文章来说怎么学习算法,敬请期待。
固然,我当时主要是复习考研,因此仍是针对专业课的历年真题来复习,像咱们的卷子中就考察了不少关于哈希表、最短路径算法、KMP算法、赫夫曼算法以及最短路径算法的应用。
对于考卷上的一些知识点,我以为掌握的并非很好,因而又买了《王道数据结构》以及一些并无什么卵用的书回来看,再次强化了基础。
而且,因为咱们的复试一般会考察一些比较经典的算法问题,因此我又花了不少时间去学习这些算法题,这些题目并不是数据结构的基础算法,因此在以前的书和视频中可能找不到答案。
因而我又在网上搜到了另外一个系列视频《小甲鱼的数据结构视频》里面除了讲解数据结构以外,还讲解了更多经典的算法题,好比八皇后问题,汉诺塔问题,马踏棋盘,旅行商问题等,这些问题对于新手来讲真的是很头大的,使用视频学习确实效果更佳。
纸上得来终觉浅,绝知此事要躬行。众所周知,算法题和数学题同样,须要多加练习,并且考研的时候必需要手写算法,因而我就常常在纸上写(抄)算法,你还别说,就算是抄,多抄几回也有助于理解。
不少基础的算法,好比层次遍历,深度优先遍历和广度优先遍历,多写几遍更有助理解,再好比稍微复杂一点的迪杰斯特拉算法,很少写几遍你可真记不住。
除了在纸上写以外,更好的办法天然是在电脑上敲了,写Java的使用Java写,写C++ 的用C++ 写,总之用本身擅长的语言实现就好,尴尬的是我当时只会c,因此就只好老老实实地用devc++写简单的c语言程序了。
至此,咱们也算是学会了数据结构的基础知识了,至少知道每一个数据结构的特性,会写常见的数据结构算法,甚至偶尔还能掏出一个八皇后出来。
《天勤数据结构》《王道数据结构》若是你要考研的话,这两本书可不要错过
严蔚敏《数据结构C语言版》这本书是大学本科计算机专业经常使用的教科书,年代久远,能够看看,官方也有配套的教学视频
《大话数据结构》官方教材你们都懂的,比较不接地气,这本书对于不少新手来讲是更适合入门的书籍。
《数据结构与算法Java版》若是你是学Java的,想有一本Java语言描述的数据结构书籍,能够试试这本,可是这本书显然比较复杂,不适合入门使用。
《郝斌数据结构》这个视频上文有提到过,年代比较久远,可是入门足够了。
《小甲鱼数据结构与算法》这个视频比较新,更加全面,有不少关于经典算法的教程,做者也入驻了B站,有兴趣也能够到B站看他的视频。
关于数据结构的学习,咱们就讲到这里了,若是还有什么疑问也能够到我公众号里找我探讨,虽然咱们提到了算法,可是这里只关注一些基础的数据结构算法,后续会有关于“怎么学算法“的文章推出,敬请期待。
对了,你想问我文章里提到的书籍和视频去哪找?我已经给你准备好了
以上资源均可以避免费领取,在个人公众号【程序员黄小斜】回复“数据结构”便可免费领取对应的资料
若是以为本文对你有帮助的话,请你也不要吝啬你的“好看”哈,转发朋友圈就是对我最大的支持啦,大家的支持是对我最大的鼓励。
对本系列文章有什么建议和意见,也欢迎留言告诉我,期待你的回馈。另外本系列文章也会制做成相应的视频放到B站,赶忙来B站关注我吧。
微信公众号:程序员黄小斜 知乎:黄小斜 B站:黄小斜
最后再送个福利,关注公众号「程序员黄小斜」
http://weixin.qq.com/r/fimstL3E7uCRrfnX93xs (二维码自动识别)
回复【2019】,送我整理一年的3T技术学习资料,包含各大技术方向,从入门到进阶。
回复【PDF】,送你《全网最火的Java程序员面试宝典》(263页)
回复【书单】,送你《Java工程师必备书单》电子书合集
回复【架构师】,送你一套Java架构师视频教程,程序员进阶必备。
回复【校招】,送你程序员校招必备的视频资料,包括算法刷题、项目课、面试课等内容。