别人帖子的精华
数据结构的本质就在于:如何将现实世界中各种各样的数据放入到内存中,并且如何在内存中操作这些数据,如何评价这些存储方案和操作方法。
方案1:基于物理存储方案的数据操作。(物理存储只有两种:连续的和不连
续的存储)
方案2:
是不是只有物理存储结构(方案)就可以了呢?在第1条中说过,现实当中的数据是有各种各样的结构的。而我们强调了物理放置方案只有2种:连续的和不连续的。
于是就产生一个问题,如何将现实世界当中的关系各种各样的数据放入到内存之中。
解决上述问题,我们可以分两步走,第1步是将现实世界的数据组织成为逻辑结构,第2步再把逻辑结构的数据映射到物理结构中。
我们抛去数据的其它属性,只留下数据的两个属性就可以了:一个属性是数据的值,另一个属性就是数据之间的关系。这两个属性就得到一个逻辑结构:graph(图),这就是离散数学中的图论。那么,这就是科学家的事情,他们负责针对具体的问题,将现实世界的数据构造出对应的graph(图)。
在第2步中,我们要做的事情,把这个graph映射到物理存储结构中,这就是数据结构要做的事情了。显然,我们可以用数组来存储,也可以用链表来存储,回忆一下最短路径算法的两个做法。ps.,二维数组、三维数组也是一个连续存储的结构,在c语言debug下,看看地址就知道了。那么,不连续的存储结构,也就是链表,当然有很多的衍生:双向链表、十字链表、等等。
数据结构是抽象的,它如何应用在计算机上?
1:如何存储数据结构的数据 以及 数据和数据之间的关系?
2:计算机里的物理存储只有两种:连续存储和不连续存储。这不够表现现实生活中的各种各样的数据结构。所有引入了 逻辑结构的思想。通过逻辑结构然后映射到物理结构上。而这才是数据结构的本质
#
自己的感悟
学习数据结构,就是当面对要解决的问题时,脑子里会快速的选择最合适,最优的数据结构!从而降低时间复杂度,空间复杂度
因此要学的东西有:
1:研究 每个数据结构的特性(如,数组,支持随机查找;链表支持快速增删
等)
2:研究,针对特定的数据结构,在它上进行常见的各类操作时的时间复杂
度,空间复杂度。
数据结构的是很纯粹的东西,那些书本里写的,在数据结构上的操作,都不是数据结构的东西!!!我们学那么多,都是为了针对特定的问题,能够选择合适的数据结构!!!
数据结构有如下:
线性表(链表,数组,栈,队列,)
树
堆
哈希
所有的数据结构都有两种存储方式:顺序存储(实现方式:数组)和链式存储(实现方式:链表)
一切实现的基础是:
数组和链表!!!!!!!!
数据结构和编程语言的关系
C语言中:链表是通过(结构体和指针实现的);数组自带
C++中:数组和类(来实现链表)
~~
学习数据结构就是学习,如何针对要解决的问题,如何选择合适的数据结构
如何评价合不合适,可以通过O (。。),来评价时间复杂度,空间复杂度。–》因此,我们需要预先研究下,在这种数据结构基础上,进行常见的操作:如查找,增加,删除。。需要的时间,空间。–》要明白,那些在数据结构上的操作(查找,增加,删除)其实并不是数据结构的东西,我们学这些–>都是为了,针对特定的问题,选择合适的最优的数据结构!!!