这篇博客我们首先看一下数据结构的研究内容
首先是通过计算机解决问题,具体问题抽象为数学模型,实质又分为三步:分析问题、提取操作对象、
找出操作对象之间的关系、用数学语言描述==》数据结构,然后就是设计算法,编程、调试、运行。
- 数据结构描述
看了上图,数据结构其实是让程序代码如何把现实生活当中的问题给信息化,然后利用计算机高效的处理这些信息从而创造价值,一般,数据结构描述的都是非数值的计算问题。
它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构
<—摘自百度百科–>
数据之间的关系
- 数据(Data):能输入到计算机,能被计算机程序识别的一类信息的载体,是计算机程序加工的原料
- 数据对象(Data Object):一类有相同特性的数据的集合
- 数据元素(Data Element):是数据的基本单位,用于描述一个对象中有什么数据,比如一个表格(学生表)
- 数据项(Data Item):是组成数据元素最小单位,比如表格里面的信息:学号、姓名、性别等就是数据项
数据结构的研究内容
- 逻辑结构
- 集合结构:结构中的元素除了同属一个集合的关系外无任何其他关系
- 线性结构:结构中的元素之间存在着一对一的关系
- 树形结构:结构中的元素之间存在着一对多的关系
- 图形结构:结构中的元素之间存在着多对多的关系
- 物理结构(存储结构)
- 顺序存储结构
- 链式存储结构
- 索引存储结构
- 散列存储结构
我们后续都是通过研究各个逻辑结构的存储结构为目标,比如说,哪种逻辑结构适合什么样的存储结构,在程序中也一样,使用哪种存储结构也是导致系统运行速度的重要因素,要学好每一种逻辑结构适合什么样的存储结构是很重要的!
抽象数据类型(ADT)
抽象数据类型指一个数据模型以及定义在此数学模型上的一组操作
- 由用户定义,从问题抽象出数学模型(逻辑结构)
- 还包括定义在数据模型上的一组抽象运算(相关操作)
- 不考虑计算机内部的具体存储结构与运算相关的具体实现算法
- 形式定义 (DSP)三元组
- D:数据对象
- S:D上的关系集
- P:对D上的基本操作集
- 定义格式
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT 抽象数据类型名
时间复杂度(T(n))
我们通常度量一个程序或者算法的好坏,通常考虑两个因素:时间和空间,我们首先来说时间,用什么来计算呢?要是用我们通常所说的时间,也就是一个程序运行所需要的时间,单纯的用时间来表示是不现实的,一个程序的运行时间通常有好多因素来决定的:CPU、网络因素、内存等。我们需要一个不受外界因素影响的判断方式来计算一个程序/算法的好坏:大O表示法
这是一个代表算法输入值的字符串的长度的函数
常用的大O表示法:效率从低到高:(常对幂指阶)
O(1) < O(log2n) < O(n) < O(nlog2n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
空间复杂度(S(n))
度量一个程序/算法所用的空间大小,计算方式和时间复杂度差不多,S(n) = T(n) = O(f(n))
时间复杂度和空间复杂度我介绍的比较浅显,可以参考: