算法学习总结1-数据结构

         在学这一部分的时候,个人经历还记忆犹新。

 三月初,来看望老师,偶然间得知老师要给琪姐开算法课,于是伙同欢仔密谋来蹭课,一计得逞,暗喜。老师说让我们一周之内看完《数据结构与算法》这本书,并总结巴拉巴拉,只记得脑袋一直回想着一个声音:不可能完成的,哪有时间看书,就算天天看,一周也看不完一本技术书,何况还是那么难的一本。

 事实证明,用我的方法,确实不能。读书的第一页遇到一个问题就开始各种查各种钻。一晚上一页没看完…… 

    周末来到廊坊,听了第一堂算法课。简短的一个小时,老师把数据结构讲解的很透彻,概念、应用、举例都印象深刻。又讲了怎么看书怎么学习等

    再次听到三遍读书法、快速阅读这些词语,不过这次听到的,多加了一句“不要求看懂,不要求记住”,讲真,第一次听到这句话的时候一开始是震惊,不明白这样的看书还有啥意义,但是心里却是着实轻松了一把,顿时感觉看书不是那么艰难的事情了。

    在我《为何生病发烧都要坚持听米老师讲的一堂课》这篇文章中,也记录了当天上课的内容和情形。下图是当时的思维导图:

算法学习总结1-数据结构

这次总结,在上次思维导图的基础上稍加改动:

算法学习总结1-数据结构

每当提到数据结构,作为一名IT人员,都会说出数组、队列、栈、树、图等相关概念,这也是本次学习算法之前我对数据结构的认识。

    那么,为什么会有数据结构?数据结构又是什么?则是本次学习算法的疑问和思考。

     1、为什么会有数据结构?

      数据结构,无非是对数据的一种梳理,好比我们家里有不同的厨具:为了做不同的饭,有砂锅、炒锅、蒸锅、高压锅等。嗯,这个比喻还不够形象。再说的形象一些,数据都是要放到电脑里的,无论是内存还是硬盘,我们这里以内存为例。

    内存就好比我们家里的房子,是一个空间,数据就是家里的各种物品。我们都知道家里会分不同的房间,不同房间里的家具不同,有书柜、衣柜、鞋柜等,名字不一样的柜子形状大小都不一样,当然用途也不一样(严格的讲,你随便用,谁都管不了,只是我们说常用的,不钻牛角尖)。对应于内存来讲,就是将内存分为不同的区域做不同的用途一样。那么衣服、鞋子、书等,就是我们要保存到内存中的各种数据,比如音乐、视频、文档等,根据这些数据的特点不同,于是我们把他们定义成不同的“形状”,这些“形状”就是数据的结构。

    为什么家里会有不同的家具,就是为什么要有数据结构。下面这段话说的很到位哦:

    A data structure is a particular way of storing and organizing data in a computer so that it can be used efficiently.

    (具体的翻译嘛,请读者意会吧)。

    2、数据结构是什么?

    从上图中可以看出来,数据结构包括三个部分:逻辑结构、存储(物理)结构、抽象数据类型。

    上面的例子中,说我们把数据定义了不同的“形状”,这里所说的结构,其实对应的是上图中的逻辑结构。

    我们知道,目前的电脑(不说量子计算机哈)还都是二进制的,可以理解为一排排的小开关。所以实际上无论我们说的栈、树、图等都是说的逻辑结构,是给人看的,二进制的计算机是看不懂哒。而所有的逻辑结构保存到内存中(电脑中的一个硬件内存卡或者是硬盘)的时候,其实都是一堆二进制,只有两种形式,要么是连续的一段,要么是间隔的,也就是说其实所有的逻辑结构存储到硬件中的时候都有两种方式,连续或者间隔。

    于是逻辑结构是给人看的,存储结构是给计算机看的,那么抽象数据类型呢?哈哈,读者可以猜一下。提示:电脑能够工作,除了硬件,仰仗的是无数的软件哦。



    抽象数据类型,是给程序看的。程序是程序设计语言实现的,所以抽象数据类型,其实是程序设计语言实现的,构成了逻辑结构和存储结构之间的一个桥梁。无论哪个语言,都要定义自己的数据类型,不同的语言数据类型大体相同略有差异。但懂了数据结构的逻辑结构了,对应到程序设计语言的时候自然也就容易懂了。


    至此,关于数据结构的总结也就告一段落了,至于其中的具体的概念,比如线性表、树、图等,思维导图一图胜过千言万语,且相关概念,书上网上都很详细啦,我就不再赘述咯!

    由于个人水平有限,如果文章中有错误的地方,欢迎读者批评指正。