数据结构这四个字我们拆分两部分,数据和结构就构成了数据结构。
数据就是能够输入到计算机并且能够被处理的符号的,大家不要过多纠结这句话。
数据则可分为:数据项,数据元素,数据对象。
数据项:最小单位,不可在拆分。
数据元素:是比较完整的单位,可以理解为我们高级语言中的class。
数据对象:是性质相同的数据元素的集合,高级语言中的List<cLass>。
最直观的就是数据库中的表:一张表就是一个数据对象,一条数据则是数据元素,数据项则是字段。
结构分为逻辑结构和物理结构。
逻辑结构:就是就是指的元素之间的关系,常用的就是:集合,线性,树,图。
物理结构(存储结构):顺序存储结构和链式存储结构
顺序存储:是把数据元素存放在地址连续的存储单元里。
链式存储:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的
就是由上述的数据和结构构成了数据结构,这样大家应该就能明白了,数据结构就是由数据对象中的元素的关系(逻辑结构)和存储结构所构成。
我们来举一个实例:int[] myArray = { 5, 9, 15, 22, 30 };
这里我声明了一个数组,首先数组中五个数字,他们在就叫数据元素,不叫项。因为数据元素是数据基本单位。但是有人就有疑问,这几个数字已经是最小单位了,为什么不是数据项,所以:数据元素有时就是数据项。
我们重新定义一个数组:string[] myArray = {“张三|男”,“李四|男”,“王五|女” };
这里面三个string就可以理解为数据元素,因为我们可分割两部分,所以是元素还是项是看自己传入的数据,你自己认为能否分割,没有硬性必须要分割才可以。
接着上面那个int数组讲,首先数据有了:5,9,15,22,30.
了解过数组的朋友应该知道:数组其实顺序非常重要,所以存储结构数组是“顺序存储结构”,然后逻辑结构是一个线性表。
所以数组就是一个:线性表的顺序表示的数据结构。
在严蔚敏的《数据结构》中被定义为一个二元组(D,S):D为数据元素的有限集,S则是D上关系的有限集。但是我认为仅仅说元素和元素上关系构成不够,应该把关系说的在明确一点,关系就是数据的存储结构和数据之间的逻辑结构,我认为这样才明确。
就是在上述描述的数据结构的基础上,进行操作,就是算法。比如对上述的数组进行“增删改查”这就是算法。
主要现在很多课程在讲数据结构时,不免都会讲到算法,其实两者是可以分开的。
数据结构就是如何存储,算法就是此数据结构上进行的一些操作。因为数据结构不同,那对应的算法肯定也不相同。
比如我仍然有1,4,5,8四个数据,由于这四个数没有任何关系,在关系上我们仍然采用线性表,但是我们存储方式采用链式存储,那么这就是一个线性链表,就不能等同于我们高级语言中的数组,那么对应的算法也会改变。
注意:算法永远是在数据结构上产生。
顺序表和链表的详解:线性表的顺序表和单链表分析