引言
数据结构与算法,就像是一片神秘的、广阔的海。(数据结构深似海)
初入这片海域,你就会被它的神秘所吸引;探索地越深,对它的神秘与广阔就越有感触。 无论哪片海域,在远处观望平静的海面总是单调的,虽然也不乏夕阳落下时映出的金黄,但是当你接触它、深入它,你会发现,只在偶尔散发出美丽景象的海面之下,还有更为广阔,美丽的风景。(数据结构与算法虽然可能看起来不简单,但是其实是真的非常的不简单)
数据结构与算法这片海域同样如此,不去接触它,只能偶尔体会到它的好与美。当真正去接触它,学习它,就能发现、发掘它更深处的美丽的风景。甚至在这片海域中创造属于你的风景。(不过只要学的好,你就能自己研究某些问题的算法(具体学得多好,一直学就对了,反正数据结构深似海))
玩笑归玩笑,不过 数据结构与算法 确实像是一片 神秘海域 ,等待着每一个冒险者(程序猿) 去探索、去深入。无论往编程的哪个方向去学习,数据结构与算法 都是一段必须走过的路程。从今天开始,正式踏入数据结构与算法的神秘海域 ,去探索数据结构与算法 的"美"!
什么是数据结构???
根据百度百科的定义:数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。写了一大堆官方性语言 其实通俗的来讲,就是 把数据按照某种规则、方法存储起来,这种逻辑上的规则、方法就是数据结构 比如,像排队一样,不能插队,得从后边等,前边出一个你前进一位,前边出两个你前进两位。 可以把一些数据也按照这样的结构、规则 存储,不过再加一个规定:入队之后就不让退出了,只能排到头之后从头出,这就是一种数据结构:队列 。 再比如,砌砖。一层一层的,但是在不破坏结构的情况下,只有上层的砖拿走之后,下层的才能拿走。 同样按照这样的规定,将数据存储起来,先被压入的数据,等其他数据退出之后才能退出,这也是一种数据结构:栈
数据结构就是这样,数据按照一定的规则存储起来。在逻辑上,数据就是按照规则存储的,但是实际上还是在内存空间中单独存储的。
数据结构是每一个优秀的程序员需要深刻理解的内容
什么是算法???
再根据百度百科的定义:算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。巴拉巴拉又写了一大堆比较官方性的语言
其实算法这个概念理解起来并不困难,算法就是解决一个问题的思路、方法
不过这个方法是(算法的特征) :
有穷的 「必须能在执行有限个步骤之后终止,肯定不能执行后停不下来」 指令(语句)是确切的 「每一步骤必须有确切的定义,一个算法中不能随便加一些无用的东西」 有输入项(不单指输入这个动作) 「用来描述运算对象的初始情况,可以是0个(0个一定是算法本身给定了明确的初始情况)」 有输出项 「反映对输入数据加工后的结果,不然怎么知道结果?」 有效可行的 「一个算法必须得能够在有效且有限的时间内解决问题才能被称为算法」
一个合格的算法,是在一个可以接受的对时间、空间的消耗内满足需求、解决问题 而一个优秀的算法则是在满足需求的基础上,最大限度的节省时间、空间,简化逻辑
简单的理解完什么是数据结构、什么是算法。接下来就来纵览一下,在学习它们的过程中逐渐会接触到哪些内容。
数据结构与算法的大致内容
在数据结构与算法的学习中,从开始到结束大致要接触到这些内容 (网上找的) : 这张思维导图涉及数据结构与算法的大致内容,只是粗略的内容,缺少一些细节。 不过根据这张图大概了解一下涉及的大内容已经足够。
如何学习数据结构与算法???
数据结构与算法的内容、知识,大多都是非常 抽象 的,不容易理解的。 无论是基础知识,还是涉及到更深层次的算法,抽象无处不在,稍有不慎可能就会无法理解。
所以在 学习数据结构与算法 的时候,不仅需要
熟悉使用一门编程语言 这是前提,也是基础,不然无法对数据结构进行实现认真思考 这是必须的多实现代码 实现数据结构、写算法题 都可以- 最好能够
将抽象的内容具体化 。
如何将抽象的内容具体化?个人感觉最好的方法,就是 画图! 画图! 画图!
画图,并不只简单的画一个数据结构的结构。 要画出对数据操作的思路、画出数据在结构中的变化、画出一个算法的执行过程。 数据在大脑中如何操作的、结构在大脑中如何变化的。 算法在大脑中是如何执行的、实际又是如何执行的、正确的应该是如何执行的 要画出变化、要画出过程、要画出思维
遇到不太理解的结构或算法,思考、画图会有更深刻的理解和记忆。
准备好去这片神秘海域探索吧。他会让你痛并快乐着。
|