一、数据结构总览
1.“数据结构”课程的内容
“数据结构”的课程内容就是基本数据组织和数据处理方法,包含各种数据的逻辑结构描述、各种数据的存储结构表示、各种数据结构的运算定义、设计实现运算的算法和分析算法的效率。
2.“数据结构”的学习方法
二、什么是数据结构
数据:所有能够输入到计算机中,切能被计算机处理的符号的集合。在数据结构中主要讨论结构化数据。
- 数据元素:是数据(集合)中的一个“个体”,他是数据的基本单位。
- 数据项:数据项是用来描述数据元素的,他是数据的最小单位。
- 数据对象:具有相同性质的若干个数据元素的集合,如整数数据对象就是所有整数的集合。
默认情况选,数据结构中讨论的数据都是数据对象。
数据结构:是指带结构的数据元素的集合。
数据结构等于数据对象加上结构,其中的数据对象指相同性质的数据元素的集合,而结构是指数据元素之间的关系构成结构。
数据结构中讨论的元素关系主要是指相邻关系和邻接关系。
一个数据结构的构成:逻辑结构+存储结构+数据原酸。
- 数据元素之间的逻辑关系=>数据的逻辑结构
- 数据元素及其存储在计算机存储器中的存储方式=>数据的存储结构
- 施加在该数据上的操作=>数据运算
1.数据的逻辑结构表示
数据的逻辑结构是面向用户的,他有各种各样的表示形式。如表格、二元组、图形等。
各种各样的数据呈现出不同的逻辑结构,归纳为4种。
- 集合
元素之间关系:无
特点:数据之间除了“属于同一个集合”的关系外,别无其他逻辑关系。 - 线性结构
元素之间关系:一对一
特点:开始元素和终端元素都是唯一的,除此之外,其余元素都有且仅有一个前趋元素和一个后继元素。 - 树形结构
元素之间关系:一对多
特点:开始元素唯一,终端元素不唯一。 - 图形结构
元素之间关系:多对多
特点:所有元素都有可能有多个前趋元素和多个后继元素。
2.数据的存储结构表示
数据在计算机存储器中存储方式就是存储结构。它是面向程序员的。
逻辑结构映射到存储结构。存储结构如结构体数组、链表等。
在软件开发中,人们设计了各种存储结构。归纳为4中基本的存储结构。
- 顺序存储结构
- 链式存储结构
- 索引存储结构
- 哈希(散列)存储结构
3.数据运算
数据运算是对数据的操作。分为两个层次:运算描述和运算实现。三、算法及其描述
1.什么是算法
数据元素之间的关系有逻辑关系和物理关系,对应的运算有基于逻辑结构的运算描述和基于存储结构的运算实现。
通常把基于存储结构的运算实现的步骤或过程称为算法。
算法有五个重要的特性:
- 有穷性:在有穷步之后结束,算法能够替你。
- 确定性:无二义性
- 可行性:可通过基本运算有限次执行来实现,也就是算法中每一个动作能够被机械地执行。
- 有输入
- 有输出
2.算法描述
3.算法分析
算法分析目的:分析算法的失控效率以便改进算法性能。分析算法占用的资源,主要分析CPU时间和内存空间。
①算法时间复杂度分析
一个算法由控制结构(顺序、分支和循环三种)和原操作(指固有数据类型的操作,如+、-、*、/、++和--等)构成的。算法执行时间取决于两者的综合结果。
算法分析方式
- 分析算法的执行时间
求出算法所有原操作的执行次数(也称为频度),它是问题规模n的函数,用T(n)表示。
算法执行时间大致=原操作所需要的时间xT(n)。
比较不同算法的T(n)大小得出算法执行时间的好坏。 - 算法的执行时间用时间复杂度来表示
算法中执行时间T(n)是问题规模n的某个函数f(n),记作:T(n)=O(f(n))
记号“O”读作“大O”,它表示随问题规模n的增大算法执行时间的增长率和f(n)的增长率相同。
一个没有循环的算法的执行时间与问题规模n无关,记作O(1),也称为常数阶。
一个只有一重循环的算法的执行时间与问题规模n的增长呈线性增大关系,记作O(n),也称为线性阶。
其余常用的算法时间复杂度还有平方阶O(n2)、立方阶O(n3)、对数阶O(log2n)、指数阶O(2n)等。
各种不同算法时间复杂度的比较关系如下:
NP=P?是目前计算机科学的难题之一
算法时间性能比较:一般认为 O(n)的时间性能好于算法 O(n2)。
②算法空间复杂度分析
空间复杂度:用于度量一个算法在运行过程中临时占用的存储空间大小。
一般也作为问题规模n的函数,采用数量级形式描述,记作:S(n)=O(g(n))
若一个算法的时间复杂度为O(1),则称此算法为原地工作或就地工作算法。