成长让人痛并快乐着。
数据结构的抽象让很多同学望而却步,为了能与大家共同分享,尽量用一些生活中的例子来形象的说明某些定义或者某些逻辑等等。
先从数据结构的概念说起:什么是数据结构?这里先不做解释
数据:所有被计算机存储、处理的对象。如声音,图像,视频,一个计算器的处理对象就是整型,这里所说的存储和处理可以这样理解:比如用计算器计算1+1=2这个过程,当我们输入‘1’、'+'、‘1’的时候相当于概念中所讲的存储,当计算以后得到2的时候,就可以看作是在处理对象了。
数据元素:它是数据的基本单位,也是运算的基本单位。(刚才1+1=2,1是数据元素)通常作为一个整个考虑和处理 。有时候数据元素是比较复杂的,当数据元素表示成一个人的时候,这个人有各种器官,这里引出数据项的概念,它是数据不可分割的最小单位,一个数据元素可由多个数据元素组成。
现在来看数据结构的概念:是数据元素之间存在的一种或多种特定关系的集合。
数据元素之间的关系也叫数据的逻辑结构,一共有四种结构,也可以看作有四种组织形式:
1.集合:结构中的数据元素除了同属于同一个集合外,数据元素之间没有其他关系。
2.线性结构:结构中的数据元素是一对一的关系,有一种先后的次序关系。如a,b,c a是b的前驱,b是c的前驱,c是b的后继
3.树形结构:结构中的数据元素之间存在一对多的层次关系。
4.图形结构:结构中的数据元素之间存在多对多的关系。
数据结构的主要任务是把上述4种元素之间的关系表现成计算机可实现的物理结构,从而便于计算机处理。也就是数据的存储结构。主要有两种:
1.顺序存储结构:把数据元素存放在一组地址联系的存储单元里,其数据元素的逻辑关系和物理关系是一致的。
2.链式存储结构:把数据元素存放在任意的存储单元里,可以是连续的,也可以是不连续的。数据元素的存储关系并不能反映其逻辑关系,需要借助指针来表示数据之间的逻辑关系。
算法的时间复杂度从小到大排序:o(1)<o(log2^n)<o(n)<o(n^2)<o(n^3)o(2^n)<o(n!)